当前位置:编程学习 > asp >>

asp.net mvc源码分析-路由篇 如何找到 IHttpHandler

学习是使用asp.net已经有很长一段时间了,现在就来分析一下mvc的整过过程吧。个人计划写一个mvc系列的博文,仅从源代码的角度来分析mvc。在接触mvc时我们一定会经历路由,那么路由这东东是怎么搞出来的啊。在我们的web.config中有这么一句:    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 看来路由是它咋负责了。在这个dll中有一个很特殊的类UrlRoutingModule

我们来看看它里面主要的核心代码吧:


[csharp] view plaincopyprint?protected virtual void Init(HttpApplication application) 
    { 
        if (application.Context.Items[_contextKey] == null) 
        { 
            application.Context.Items[_contextKey] = _contextKey; 
            application.PostResolveRequestCache += new EventHandler(this.OnApplicationPostResolveRequestCache); 
        } 
    } 
 
    private void OnApplicationPostResolveRequestCache(object sender, EventArgs e) 
    { 
        HttpContextBase context = new HttpContextWrapper(((HttpApplication) sender).Context); 
        this.PostResolveRequestCache(context); 
    } 
 
    public virtual void PostResolveRequestCache(HttpContextBase context) 
    { 
        RouteData routeData = this.RouteCollection.GetRouteData(context); 
        if (routeData != null) 
        { 
            IRouteHandler routeHandler = routeData.RouteHandler; 
            if (routeHandler == null) 
            { 
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, SR.GetString("UrlRoutingModule_NoRouteHandler"), new object[0])); 
            } 
            if (!(routeHandler is StopRoutingHandler)) 
            { 
                RequestContext requestContext = new RequestContext(context, routeData); 
                context.Request.RequestContext = requestContext; 
                IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext); 
                if (httpHandler == null) 
                { 
                    throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, SR.GetString("UrlRoutingModule_NoHttpHandler"), new object[] { routeHandler.GetType() })); 
                } 
                if (httpHandler is UrlAuthFailureHandler) 
                { 
                    if (!FormsAuthenticationModule.FormsAuthRequired) 
                    { 
                        throw new HttpException(0x191, SR.GetString("Assess_Denied_Description3")); 
                    } 
                    UrlAuthorizationModule.ReportUrlAuthorizationFailure(HttpContext.Current, this); 
                } 
                else 
                { 
                    context.RemapHandler(httpHandler); 
                } 
            } 
        } 
    } 

protected virtual void Init(HttpApplication application)
    {
        if (application.Context.Items[_contextKey] == null)
        {
            application.Context.Items[_contextKey] = _contextKey;
            application.PostResolveRequestCache += new EventHandler(this.OnApplicationPostResolveRequestCache);
        }
    }

    private void OnApplicationPostResolveRequestCache(object sender, EventArgs e)
    {
        HttpContextBase context = new HttpContextWrapper(((HttpApplication) sender).Context);
        this.PostResolveRequestCache(context);
    }

    public virtual void PostResolveRequestCache(HttpContextBase context)
    {
        RouteData routeData = this.RouteCollection.GetRouteData(context);
        if (routeData != null)
        {
            IRouteHandler routeHandler = routeData.RouteHandler;
            if (routeHandler == null)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, SR.GetString("UrlRoutingModule_NoRouteHandler"), new object[0]));
            }
            if (!(routeHandler is StopRoutingHa

补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,