NET网页编程之浅析ASP.NET Routing对哀求的分歧处置
Java欺骗了我们那么多年,如今的多核时代,我认为它气数已尽!<p>在这里我们将报告ASP.NETRouting对哀求的分歧处置。文章将从处置机制方面入手下手讲起,然后报告监听的历程。但愿本文能对人人有所匡助。ASP.NETRouting是一个通用的组件,它不触及就任何详细的哀求处置体例。假如您必要,也能够本人基于它举行开辟——如FubuMvc项目就是这么做的。
起首,假如您必要在项目中利用在ASP.NETRouting的功效,则必要在web.config文件中设置一个HttpModule:
<OLclass=dp-c>publicstaticvoidRegisterRoutes(RouteCollectionroutes){routes.IgnoreRoute("scripts/{*pathInfo}");routes.IgnoreRoute("images/{*pathInfo}");routes.MapRoute("Default",//Routename"{controller}/{action}/{id}",//URLwithparametersnew{controller="Home",action="Index",id=""}//Parameterdefaults);}
线程平安的),只不外我们平常不太会往这么做罢了。值得注重的是,RouteCollections里的RouteBase工具,它们的按次长短常主要的。
UrlRouteModule会监听ASP.NETRequestPipelines的PostResolveRequestCache事务,在这个事务中UrlRouteModule会将以后的HttpContext作为参数挪用RouteTable.Routes汇合的GetRouteData办法。在RouteCollection的GetRouteData办法中,又会顺次将HttpContext传进每个RouteBase工具的GetRouteData办法,假如半途某个RouteBase工具前往了一个非null的了局,则这个了局便会间接前往给UrlRouteModule。
假如UrlRouteModule挪用RouteTable.Routes.GetRouteData办法失掉了null,则“统统都像没有产生过”。假如GetRouteData办法失掉了却果——一个RouteData工具,此时RouteData.Values便会包括哀求中捕捉到的数据。RouteData中另外一个主要的成员即是RouteData.RouteHandler属性,它前往一个IRouteHandler工具。IRouteHandler接口中只要一个办法GetHttpHandler,它承受RequestContext作为参数,并前往一个IHttpHandler工具。如ASP.NETMVC框架在使用ASP.NETRouting时,便会利用MvcRouteHandler来前往一个MvcHandler工具。
不外,UrlRouteModule在失掉了IRouteHandler工具以后,其实不会间接挪用其GetHttpHandler办法,而是判别它是否是ASP.NETRouting自带的StopRoutingHandler范例。StopRoutingHandler是个特别的IRouteHandler工具,它的感化只是告知UrlRouteModule,固然某个划定规矩婚配乐成了,可是——也仍是当甚么都没产生过吧。因而,假如我们想要“跳过”一些情势的哀求,常常则必要将“疏忽”功效放在其他一切划定规矩之前。如:
<OLclass=dp-c>publicstaticvoidRegisterRoutes(RouteCollectionroutes){routes.IgnoreRoute("p{*pathInfo}?);<{resource}.axdname="UrlRoutingModule">
IgnoreRoute是界说在ASP.NETMVC中,基于RouteCollection范例的扩大办法。它会向RouteCollection中增加一个Route工具,而这个Route工具在婚配乐成时前往的RouteData工具,其RouteHandler属性便为一个StopRoutingHandler,因而余下的Routing划定规矩也不会持续婚配了——这一点和RouteBase工具前往null分歧,由于假如前往null,则余下的划定规矩还会顺次婚配。假如前往了一个包括StopRoutingHander的RouteData,则剩下的Routing划定规矩全体跳过。
假如UrlRouteModule失掉的IRouteHandler工具不是StopRoutingHandler,则便会经由过程其GetHttpHandler办法取得谁人IHttpHandler工具。这个IHttpHandler工具会被放进HttpContext的Items汇合中。至此,RequestPipeline的PostResolveRequestCache事务便停止了。
UrlRouteModule还会监听PostMapRequest事务,此时Module便会查找HttpContext.Items汇合的特定地位中是不是包括一个IHttpHandler工具,假如存在,则会将这个工具设为以后HttpContext工具的Handler属性的值。因而当ASP.NET持续实行下往时,便会挪用这个Handler的ProcessRequest办法来处置哀求了。
假如这个IHttpHandler工具是MvcHttpHandler,那末它便会从RouteData中猎取一些数据,机关Controller工具,实行Action等等。假如它是一个DynamicDataHandler,或是WebForm的HttpHandler,那末剩下的即是各自的模子的处置体例了。
因而,ASP.NETRouting是一个通用的组件,它不触及就任何详细的哀求处置体例。假如您必要,也能够本人基于它举行开辟——如FubuMvc项目就是这么做的。
<p>在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗? JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。 主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。 Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。 微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
页:
[1]