요청 파이프라인은 HTTP 요청을 처리하는 데 사용되는 모듈의 조합입니다. ASP.NET에서 요청 파이프라인에는 두 가지 핵심 구성 요소가 있습니다. : IHttpModule
그리고 IHttpHandler
. 모든 HTTP 요청은 IHttpHandler
을 입력하고 IHttpHandler
은 IHttpModule
개체의 이벤트를 구독하여 HttpApplication
가 IHttpHandler
HTTP 요청을 처리하기 전에 요청을 전처리할 수 있습니다. HTTP 요청을 처리한 후 다시 처리합니다. IHttpHandler
은 또는 HttpRun<a href="//m.sbmmt.com/wiki/1268.html" target="_blank">time</a>
에서 개체 풀에서 HttpApplicationFactory
개체를 꺼내면(.NET의 유사한 메커니즘에는 스레드 풀과 HttpApplication
문자열 보관 풀이 포함됨) ASP.NET이 구성 파일 등록된 HttpApplication
및 은 초기화 중에 HTTP 요청을 처리하기 위해 HttpApplication의 이벤트를 구독합니다. HttpModule
ASP.NET HttpModule
MVC
클래스는 파일에 정의되고 은 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()
필터 등록 등 . 경로
요청 데이터를 얻는 것입니다. HttpModule
UrlRoutingModule
은 현재 요청된 URL과 에 등록된 라우팅 템플릿을 일치시키고, 현재 요청과 일치하는 첫 번째 경로 객체 를 반환한 후, 경로 객체
를 기반으로 라우팅 데이터 객체를 얻는다. (ASP.NET MVC에서 라우팅 데이터에는 컨트롤러 및 작업의 이름이 포함되어야 합니다.) UrlRoutingModule
을 사용하여 RouteTable
를 가져오고 마지막으로 Route
을 사용하여 RouteData
을 가져옵니다. RouteData
IRouteHandler
IRouteHandler
IHttpHandler
HttpHandler
Controller
의 유형을 얻으세요. IHttpHandler
ProcessRequest
ControllerBuilder
IControllerFactory
ActionController
의 ControllerBase
메소드를 통해 실행됩니다. Controller
실행 전 Execute
모델 IActionInvoker
바인딩 및 모델 인증 작업이 수행됩니다. InvokeAction
在ASP.NET MVC5中有常用的过滤器有5个:IAuthenticationFilter
、IAuthorizationFilter
、IActionFilter
、IResultFilter
、I<a href="//m.sbmmt.com/wiki/265.html" target="_blank">Exception</a>Filter
。
在ASP.NET MVC中所有的过滤器最终都会被封装为Filter
对象,该对象中FilterScope
类型的属性Scope
和int
类型属性<a href="//m.sbmmt.com/wiki/1360.html" target="_blank">Ord</a>er
用于决定过滤器执行的先后顺序,具体规则如下:
Order
和FilterScope
的数值越小,过滤器的执行优先级越高;
Order
比FilterScope
具有更高的优先级,在Order
属性值相同时才会被考虑
//数值越小,执行优先级越高public enum FilterScope { Action= 30, Controller= 20, First= 0, Global= 10, Last= 100}
Action
执行完毕之后会返回ActionResult
类型对象作为对此次请求进行处理的结果,对于不是ActionResult
类型的返回值,ASP.NET MVC会将其转换为ActionResult
类型。
ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点,请求到达服务器后进入处理管道,至浏览器接收服务器响应时为止。
最后附上一张老外绘制的ASP.NET请求管道图,图片来自《ASP.NET MVC Interview Questions and Answers Book》这本书。
위 내용은 ASP.NET MVC5 요청 처리 파이프라인 및 수명 주기에 대한 자세한 자습서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!