IIS服务器如何识别该请求是mvc请求?

时间:2014-08-05 08:44:16

标签: asp.net-mvc page-lifecycle

在asp.net生命周期中,基于扩展(.aspx),请求将由aspnet_isapi.dll标识和处理,然后创建httpapplication对象,然后是请求和响应对象然后请求由ProcessRequest()方法处理。

我正在经历mvc page life cycle

我怀疑IIS服务器如何识别传入请求是否是MVC请求?

3 个答案:

答案 0 :(得分:4)

我所做的一些研究的答案都集体解决了我的问题。

第1步: 从下面提到的文章#1(我在研究期间发现):

  

从很高的角度来看,IIS只是一个正在监听的过程   特定端口(通常为80)。听力意味着它已经准备好接受了   来自80端口客户端的连接。非常重要的事情   记住的是:IIS不是ASP.NET。这意味着IIS不知道   关于ASP.NET的任何事情它可以单独工作。

第2步:

注意: When we deploy and start the application in IIS, it would call Application_Start which would register the routes。 因此,当MVC请求进入IIS时,我们已准备好使用路由表来处理此请求。

第3步:

如@Babin所述,IIS并不知道如何处理请求,但由于ASP.NET框架,请求会自动转发给托管处理程序。

第4步:

如@Rune所述,请求被UrlRoutingModule截获,而If no routes match, the UrlRoutingModule object does nothing and lets the request fall back to the regular ASP.NET or IIS request processing. 又获取MvcRouteHandler类的对象,该类最终将映射到控制器和操作以处理请求。

第5步:

SO question's comments之一所述:

{{1}}

<强>参考文献:

我找到了很好的文章来阅读并清除IIS请求处理中的疑问。

1)以下链接深入解释了IIS如何处理ASP.NET WebForms请求: http://www.codeproject.com/Articles/121096/Web-Server-and-ASP-NET-Application-Life-Cycle-in-D

2)以下链接说明了IIS如何使用托管处理程序处理MVC请求: http://blogs.msdn.com/b/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of-extensionless-urls-without-impacting-static-requests.aspx

3)MVC生命周期: http://pratiktips.blogspot.de/2012/08/the-magic-of-aspnet-mvc-model-binding.html

答案 1 :(得分:2)

IIS 7+可以在两种管道模式下运行:&#34;经典模式&#34;和&#34; Integrated mode&#34;。后一种模式意味着ASP.NET可以查看所有传入的请求,并可以处理/操作它们。

如果您询问ASP.NET如何知道调用MVC,则在您链接到的图的步骤4中对此进行了描述:UrlRoutingModule匹配针对所有已注册路由的请求。使用MVC时,您将注册一个MvcRouteHandler的路由。来自MSDN:

  

使用MapRoute方法时,MvcRouteHandler实例已在路由中注册。调用MvcRouteHandler类时,该类使用当前的RequestContext实例生成MvcHandler实例。然后它将控制权委托给新的MvcHandler实例

答案 2 :(得分:1)

IIS不知道; ASP.NET通过HTTP处理程序知道

WebForms和MVC都建立在ASP.NET之上,并且都使用HTTP处理程序来处理每个请求的执行:

  • WebForms将.aspx文件映射到PageHandlerFactory:PageHandlerFactory实现IHttpHandlerFactory :: GetHandler()返回HttpHandler

  • MVC作为IRouteHandler实现集成到路由基础结构中。通过UrlRoutingHandler向路由通知请求URLRoutingHanlder实现IHttpHandler。 ASP.NET MVC只是添加到ASP.NET管道的自定义处理程序。

以下是MVC 4.0&amp; ASP.NET 4.0以上可以在IIS中的任何级别定义这些规则。大多数MVC应用程序在web.config文件中定义应用程序级别的处理程序

<handler>
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0"/>
</handlers>