>  기사  >  백엔드 개발  >  ASP.NET MVC5 요청 처리 파이프라인 및 수명 주기에 대한 자세한 자습서

ASP.NET MVC5 요청 처리 파이프라인 및 수명 주기에 대한 자세한 자습서

PHPz
PHPz원래의
2017-04-23 16:29:052837검색

요청 처리 파이프라인

요청 파이프라인은 HTTP 요청을 처리하는 데 사용되는 모듈의 조합입니다. ASP.NET에서 요청 파이프라인에는 두 가지 핵심 구성 요소가 있습니다. : IHttpModule 그리고 IHttpHandler. 모든 HTTP 요청은 IHttpHandler을 입력하고 IHttpHandlerIHttpModule 개체의 이벤트를 구독하여 HttpApplicationIHttpHandler HTTP 요청을 처리하기 전에 요청을 전처리할 수 있습니다. HTTP 요청을 처리한 후 다시 처리합니다. IHttpHandler

IIS6이나 IIS5와 같은 IIS7 이전에는 요청 처리 파이프라인이 IIS 요청 처리 파이프라인과 ASP.NET 파이프라인으로 나누어져 있었습니다. 클라이언트가 정적 리소스를 요청하면 IIS 파이프라인만 처리하게 되었고, ASP.NET 요청이 파이프라인에서 처리되지 않습니다. IIS7부터 두 파이프라인이 하나로 결합되어 통합 파이프라인이라고 합니다.


위 그림에서는 너무 자세히 설명하지 않고 주로 ASP.NET 런타임에 의한 HTTP 요청 처리를 설명합니다.

HttpApplication 및 HttpModule

HTTP 요청이 ASP.NET 런타임에 의해 인계된 후

은 또는 HttpRun<a href="http://www.php.cn/wiki/1268.html" target="_blank">time</a>에서 개체 풀에서 HttpApplicationFactory 개체를 꺼내면(.NET의 유사한 메커니즘에는 스레드 풀과 HttpApplication 문자열 보관 풀이 포함됨) ASP.NET이 구성 파일 등록된 HttpApplication은 초기화 중에 HTTP 요청을 처리하기 위해 HttpApplication의 이벤트를 구독합니다. HttpModuleASP.NET HttpModuleMVC

5에서

클래스는 파일에 정의되고 Global.asax 클래스에서 MvcApplication을 상속합니다. HttpApplication

public class MvcApplication : System.Web.HttpApplication
{    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RouteTable.Routes.Add("xfhHandler", new Route(           "{controller}/{action}",            new RouteValueDictionary(new Dictionary<string, object>() { ["controller"] = "home", ["action"] = "index" }),            new XfhUrlRouteHandler())
        );        //RouteConfig.RegisterRoutes(RouteTable.Routes);    }
}


메소드가 먼저 실행됩니다. 일반적으로 이 메소드에는

경로

등록, 전역 Application_Start()필터 등록 등 . 경로

HTTP 요청은 하나 이상의 에 의해 처리됩니다. 은 매우 중요한 모듈로, 라우팅 시스템의 핵심입니다. 라우팅 시스템의 책임은 요청 URL에서 컨트롤러 및 작업 이름과

기타

요청 데이터를 얻는 것입니다. HttpModuleUrlRoutingModule은 현재 요청된 URL과 에 등록된 라우팅 템플릿을 일치시키고, 현재 요청과 일치하는 첫 번째 경로 객체 를 반환한 후, 경로 객체
를 기반으로 라우팅 데이터 객체를 얻는다. (ASP.NET MVC에서 라우팅 데이터에는 컨트롤러 및 작업의 이름이 포함되어야 합니다.) UrlRoutingModule을 사용하여 RouteTable를 가져오고 마지막으로 Route을 사용하여 RouteData을 가져옵니다. RouteDataIRouteHandlerIRouteHandlerIHttpHandlerHttpHandler

HTTP 요청은 결국 처리를 위해 HttpHanler에 들어갑니다. HTTP 요청은 하나의 HttpHandler에서만 처리할 수 있습니다.

Controller

메서드에서 현재 요청을 처리하고, 이 메서드에서는

를 전달하여그런 다음 Reflection을 통해

의 유형을 얻으세요. IHttpHandlerProcessRequestControllerBuilderIControllerFactoryActionController

ASP.NET MVC에서 메서드에서 모든 의 기본 클래스입니다. of the type

에 대한 호출은

ControllerBase 메소드를 통해 실행됩니다. Controller 실행 전 Execute 모델 IActionInvoker 바인딩 및 모델 인증 작업이 수행됩니다. InvokeAction

Filters

在ASP.NET MVC5中有常用的过滤器有5个:IAuthenticationFilterIAuthorizationFilterIActionFilterIResultFilterI<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a>Filter
在ASP.NET MVC中所有的过滤器最终都会被封装为Filter对象,该对象中FilterScope类型的属性Scopeint类型属性<a href="http://www.php.cn/wiki/1360.html" target="_blank">Ord</a>er用于决定过滤器执行的先后顺序,具体规则如下:

  • OrderFilterScope的数值越小,过滤器的执行优先级越高;

  • OrderFilterScope具有更高的优先级,在Order属性值相同时才会被考虑


//数值越小,执行优先级越高public enum FilterScope
{
    Action= 30,
    Controller= 20,
    First= 0,
    Global= 10,
    Last= 100}

ActionResult

Action执行完毕之后会返回ActionResult类型对象作为对此次请求进行处理的结果,对于不是ActionResult类型的返回值,ASP.NET MVC会将其转换为ActionResult类型。

请求生命周期

ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点,请求到达服务器后进入处理管道,至浏览器接收服务器响应时为止。

最后附上一张老外绘制的ASP.NET请求管道图,图片来自《ASP.NET MVC Interview Questions and Answers Book》这本书。


 

课程推荐

php中文网在线Java视频教程

위 내용은 ASP.NET MVC5 요청 처리 파이프라인 및 수명 주기에 대한 자세한 자습서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.