繁体   English   中英

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

[英]How does IIS server identify that request is mvc request?

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

我正在经历mvc页面生命周期

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

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

第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拦截了请求,而UrlRoutingModule又获取了MvcRouteHandler类的对象,该类最终将映射到控制器和操作以处理请求。

第5步:

SO问题之一所述:

If no routes match, the UrlRoutingModule object does nothing 
and lets the request fall back to the regular ASP.NET or IIS request processing.

参考文献:

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

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

2)以下链接说明了IIS如何使用托管处理程序处理MVC请求: http//blogs.msdn.com/b/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of -extensionless的URL,而不会影响性静电,requests.aspx

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

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

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

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

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和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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM