时间:2016-02-16 00:53 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【asp.net mvc路由篇 如何找到 IHttpHandler方法介绍】,下面是详细的讲解!
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我们来看看它里面主要的核心代码吧:
在IHttpModule.Init中注册了一个PostResolveRequestCache事件,而该事件主要是调用PostResolveRequestCache这个方法,在这个方法里面有几句很重要的代码是
让我们来分析第一句RouteData routeData=this.RouteCollection.GetRouteData(context) ,这句我们猜测是获取路由信息。要想理解这句代码又得回到我们程序中来,我们在Global.asax.cs文件中的RegisterRoutes方法中,默认有这么一句
这句代码主要是注册一个路由,这里的url要注意不能随便写,需要有controller和action。具体是怎么实现的了?
各参数如下
在这里创建了一个Route实例并且把它加入到RouteCollection中了。
现在又让我们回到 RouteData routeData=this.RouteCollection.GetRouteData(context);这句代码中来,GetRouteData的主要代码如下:
在这里的base2就是我们先前调用MapRoute是添加的Route的。而Route的GetRouteData的方法如下:
这个方法很复杂,有许多验证和检查,我们主要关心一句 RouteData data=new RouteData(this, this.RouteHandler);
当然剩下 RequestContext requestContext=new RequestContext(context, routeData);
context.Request.RequestContext=requestContext;这2句没什么特别了。
现在让我们来看看IHttpHandler httpHandler=routeHandler.GetHttpHandler(requestContext);这句究竟干了些什么,意思很明白获取Httphandler。
那么MvcRouteHandler是如何获取一个Httphandler的了,
直接返回了一个MvcHandler实例。
最有一句context.RemapHandler(httpHandler); 很简单很好明白吧,在HttpContext的RemapHandler方法中有这么一句 this._remapHandler=handler;
在HttpContext中有这个属性
那么这个东西又是什么时候调用的了,在HttpApplication的内部类MaterializeHandlerExecutionStep中的 void HttpApplication.IExecutionStep.Execute()方法调用
看到MaterializeHandlerExecutionStep这个了类名,我想大家都能猜到吧。在内部类PipelineStepManager中BuildSteps方法有
我想大家看到这里对mvc整个路由应该有个大致的理解了吧。
关于asp.net mvc路由篇 如何找到 IHttpHandler方法介绍的用户互动如下:
相关问题:asp.net上mvc结构的性能比起所有操作都放在页面的c...
答:性能肯定要下降了,不过是代码层次清晰了,耦合度降低了,重用性比较高而已! MVC优点: 1.大型开发的时候容易维护,扩展性很好。 2.能够对HTML有完全的控制权限,对于前端来说很友好。 3.能够进行单元测试,保证功能的实现。 缺点: 1.没有那么多... >>详细
相关问题:做 asp.net mvc 项目时,不小心更改了其实页面,结...
答:MVC是路由映射的,改成HOME/INDEX就可以了,没有.aspx后缀 >>详细
相关问题:asp.net mvc2.0重写MvcHandler
答:最好把代码贴出来,在mvc2中对handler是有所修改的 >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
