2015-08-28 100 views
2

我在MvcHandler里面看到一个名为ProcessRequest的函数,但我无法确定它何时会被调用?什么时候调用MvcHandler.ProcessRequest方法以及由谁?

什么时候会调用它以及谁会调用它?

+0

获得HttpContextBase后,将调用ProcessRequest()方法的内部版本,并将HttpContextBase参数传递给它。然后进一步调用ProcessRequestInit(),它负责从RouteData集合中提取控制器名称,并请求控制器工厂创建相应的控制器。 http://www.codeproject.com/Articles/595520/MvcRouteHandler-and-MvcHandler-in-ASP-NET-MVC-Fram –

+0

您必须搜索实现IHttpHandler合同的类,因为它只公开一种方法,即ProcessRequest( )一个。伟大的话题。 –

+0

但是谁会调用该方法并在什么时间点(我的意思是,在应用程序生命周期中的什么事件) –

回答

4

它被ASP.Net管道调用,作为其生命周期的一部分以及使用路由时采取的具体步骤。

当mvc路由匹配当前请求时,其MvcRouteHandler返回将处理请求的IHttpHandler。在这种情况下,一个MvcHandler返回:

protected virtual IHttpHandler GetHttpHandler(RequestContext requestContext) 
{ 
    requestContext.HttpContext.SetSessionStateBehavior(GetSessionStateBehavior(requestContext)); 
    return new MvcHandler(requestContext); 
} 

MvcHandler实现IHttpHandler,这是用来定义处理程序的http请求的ASP的接口。

所有这些都是标准ASP. Net application lifecycle的一部分,其中UrlRoutingModule找到匹配的路由,得到它的路由处理器,最后是IHttpHandler。这将返回到ASP,稍后将调用ProcessRequest(您可以将其看作request is processed by the HttpApplication pipeline部分的步骤15)。

PS。有一个非常好的MVC特定的流水线图here

+0

如果我将UrlRoutingModule调用(Modules [“UrlRoutingModule-4.0”]).GetHandler(Request。 RequestContext的);在Application_BeginRequest事件中,我直接将输出传递给浏览器。这里怎么来的asp.net知道它得到了HttpHandler对象并发送响应到浏览器 –

+0

我不明白你的问题,你试图手动模拟asp.net做什么?另外,UrlRoutingModule中没有GetHandler? –

+0

sry它(模块[“UrlRoutingModule-4.0”]为UrlRoutingModule).RouteHandler.GetHandler(Request.RequestContext); –

相关问题