关于UrlRoutingModule 中的 context.RewritePath("~/UrlRouting.axd");

   UrlRoutingModule处理模块用于解析请求的URL,并选择相应的路由。

   很多人在看源码的时候  对下面的context.RewritePath("~/UrlRouting.axd");不解

 

  void PostResolveRequestCache(HttpContextBase context)
{
    RouteData routeData = .RouteCollection.GetRouteData(context);
     (routeData != )
    {
        IRouteHandler routeHandler = routeData.RouteHandler;
         (routeHandler == )
        {
              InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, RoutingResources.UrlRoutingModule_NoRouteHandler,  object[]));
        }
         (!(routeHandler  StopRoutingHandler))
        {
            RequestContext requestContext =  RequestContext(context, routeData);
            IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);
             (httpHandler == )
            {
                  InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, RoutingResources.UrlRoutingModule_NoHttpHandler,  object[] { routeHandler.GetType() }));
            }
            RequestData data2 =  RequestData {
                OriginalPath = context.Request.Path,
                HttpHandler = httpHandler
            };
            context.Items[_requestDataKey] = data2;
            context.RewritePath();
        }
    }
}

其实这里涉及到ASP.NET的HTTP请求的管线问题
大家都知道 PostResolveRequestCache和PostMapRequestHandler还有个事件 ,事件顺序如下(来自MSDN)

9.引发 PostResolveRequestCache 事件。

10.根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。

11.引发 PostMapRequestHandler 事件。


这个事件负责根据文件扩展名映射到具体的httphandle处理类,而MVC的URL信息没有具体的文件后缀名 为了使处理模块能够在iis7中实现路由,则采取了这么一种简单的解决办法。先把路径指向~/UrlRouting.axd,在此事件中会设置一个UrlRouting.axd类型的Handler避免报错,

并在下一步事件中替换掉此处的Handler再把~/UrlRouting.axd这个路径给改回来。

   

 




















 

 

 

转载于:https://www.cnblogs.com/xuzhiwei/archive/2011/12/08/2280290.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值