在上文在Asp.Net里使用自定义映射进行重定向 中,如果在配置节里没有找到匹配的重定向地址时,应该怎么执行当前的地址呢。
比如在web.config里定义如下
<URLRewriterConfig>
<Rules>
<URLRewriterRule>
<MatchUrl>show_([\d]+)\.aspx</MatchUrl>
<RedirectUrl><![CDATA[target.aspx?to=$1]]></RedirectUrl>
</URLRewriterRule>
</Rules>
</URLRewriterConfig>
<httpHandlers>
<add verb="POST,GET" path="show_*.aspx" type="FaibClass.Common.Web.URLRewriterHandler, FaibClass.Common" />
</httpHandlers>
这样,只要符合show_*.aspx的页面都会使用URLRewriterHandler,但如果是站内存在这样的文件 show_article.aspx ,那也将会被重定向到target.aspx执行。但是,该url并不会在URLRewriterConfig里找到匹配的项,因此,页面就无任何输出。
试着这样修改ProcessRequest过程:
所以,使用IHttpHandler实现重定向是不是真的不太理想呢,急希望各位高手指点指点。
比如在web.config里定义如下
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
这样,只要符合show_*.aspx的页面都会使用URLRewriterHandler,但如果是站内存在这样的文件 show_article.aspx ,那也将会被重定向到target.aspx执行。但是,该url并不会在URLRewriterConfig里找到匹配的项,因此,页面就无任何输出。
试着这样修改ProcessRequest过程:
1
public void ProcessRequest(HttpContext context)
2
{
3
URLRewriterRuleCollection rules = URLRewriterConfiguration.GetConfig().Rules;
4
string requestedPath = context.Request.FilePath;
5
for(int i = 0; i < rules.Count; i++)
6
{
7
Regex reg = new Regex(rules[i].MatchUrl, RegexOptions.IgnoreCase);
8
bool isMatch = reg.IsMatch(requestedPath);
9
if(isMatch)
10
{
11
context.Server.Execute(reg.Replace(requestedPath, rules[i].RedirectUrl));
12
return;
13
}
14
}
15
context.Server.Execute(requestedPath); // 这里发生错误:子请求无效
16
}
17![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
这样做并没有得到预期的效果,反而发生了一个错误:子请求无效。试着使用context.Current.Response.Redirect更是使页面在这期间重复来回。![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
所以,使用IHttpHandler实现重定向是不是真的不太理想呢,急希望各位高手指点指点。