在URL重写的时候,如何取出$1的值啊

diaopeng520 2009-12-18 05:36:37
比如有一个匹配规则
virtualUrl="^/user/([[a-zA-Z0-9_-]{3,})"
destinationUrl="~/user/index.aspx?userName=$1"

enter url: user/test

Regex regex = new Regex(virtualUrl, RegexOptions.IgnoreCase | RegexOptions.Compiled | regexOptions);
string rewriteUrl = regex.Replace(url, destinationUrl);

会得到rewriteUrl = "~/user/index.aspx?userName=test"
可是我要怎么才能得到$1的值呢?我想做一些额外的处理。
...全文
108 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzs2304 2009-12-18
  • 打赏
  • 举报
回复
up
liulangdeyuyu 2009-12-18
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分
diaopeng520 2009-12-18
  • 打赏
  • 举报
回复
原来match.Group[1].Value可以取出来,之前以为一直取的是/user/test
zhouyanfss 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 diaopeng520 的回复:]
或者我想换个问法会比较好。
输入Url地址:/user/test

匹配规则: /user/([a-zA-Z0-9])

要怎么取出test
[/Quote]
就在那里匹配!正则你不懂么?匹配出来的就是test,但要你自己写点代码
因为原代码直接用正则替换,所以他没取出
你随便两行代码把他取出来不就行了!
diaopeng520 2009-12-18
  • 打赏
  • 举报
回复
或者我想换个问法会比较好。
输入Url地址:/user/test

匹配规则: /user/([a-zA-Z0-9])

要怎么取出test
zhouyanfss 2009-12-18
  • 打赏
  • 举报
回复

Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);

// See if a match is found
if (re.IsMatch(requestedPath))
{
// match found - do any replacement needed
string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));

// log rewriting information to the Trace object
app.Context.Trace.Write("ModuleRewriter", "Rewriting URL to " + sendToUrl);

// Rewrite the URL
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
break; // exit the for loop
}

lookFor是正则
requestedPath是你的真实URL
Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);正则对象也创建好的
你要做的仅仅是把匹配项去出来就可以了,取出的就是你要的$1,$2...
.net正则不会用可以看MSDN,有示例的!
diaopeng520 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhouyanfss 的回复:]
\ModuleRewriter.cs
可以进行跟踪,改写,或者他下一步调用的函数里改
有兴趣把整个项目都改改!
我感觉写的不杂好!
[/Quote]

UrlRewriter也是和UrlRewriting.NET一样的做法re.Replace(requestedPath, rules[i].SendTo)
一次性替换。。。没法取。。。
zhouyanfss 2009-12-18
  • 打赏
  • 举报
回复
\ModuleRewriter.cs
可以进行跟踪,改写,或者他下一步调用的函数里改
有兴趣把整个项目都改改!
我感觉写的不杂好!
diaopeng520 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lovely_baby 的回复:]
重写的时候不都是先获取值 再替换??
[/Quote]

是用正则一次性替换,所以想单个取出来。
string rewriteUrl = regex.Replace(url, destinationUrl);
就像这一句,一次性就被替换了。所有的参数。
diaopeng520 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kevin_xu4365 的回复:]
request取不到吗?
[/Quote]

是要在Rewrite之前
diaopeng520 2009-12-18
  • 打赏
  • 举报
回复
恩,是要在程序里取到$1,也就是userName的值。在Rewrite之前。我看下,我是用UrlRewriting.NET
kevin_xu4365 2009-12-18
  • 打赏
  • 举报
回复
request取不到吗?
Lovely_baby 2009-12-18
  • 打赏
  • 举报
回复
重写的时候不都是先获取值 再替换??
zhouyanfss 2009-12-18
  • 打赏
  • 举报
回复
你要在程序里获取吗?
可以再urlrewrite的项目里\ModuleRewriter.cs文件的Rewrite函数中获得

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧