Heim > Artikel > Backend-Entwicklung > Detailliertes Tutorial zur ASP.NET MVC5-Anforderungsverarbeitungspipeline und zum Lebenszyklus
Die Anforderungspipeline ist eine Kombination von Modulen, die zur Verarbeitung von HTTP-Anforderungen verwendet werden. In ASP.NET besteht die Anforderungspipeline aus zwei Kernkomponenten : IHttpModule
und IHttpHandler
. Alle HTTP-Anfragen werden IHttpHandler
eingegeben und IHttpHandler
führt die endgültige Verarbeitung durch. Durch das Abonnieren von Ereignissen im IHttpModule
-Objekt kann HttpApplication
die Anfrage vorverarbeiten oder vorverarbeiten, bevor IHttpHandler
die HTTP-Anfrage verarbeitet Verarbeiten Sie die HTTP-Anfrage nach der Verarbeitung erneut. IHttpHandler
mit oder von HttpRun<a href="http://www.php.cn/wiki/1268.html" target="_blank">time</a>
Nehmen Sie ein HttpApplicationFactory
-Objekt aus dem Objektpool heraus (ähnliche Mechanismen in .NET umfassen den Thread-Pool und den HttpApplication
String -Detention-Pool), und ASP.NET initialisiert es entsprechend dem Konfigurationsdatei HttpApplication
Die registrierten und abonnieren Ereignisse in HttpApplication während der Initialisierung, um HTTP-Anfragen zu verarbeiten. HttpModule
HttpModule
In ASP.NET
5 ist die Klasse in der Datei definiert und Global.asax
erbt MvcApplication
von der Klasse : 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); } }-Methode wird zuerst ausgeführt. Im Allgemeinen werden in dieser Methode einige Konfigurationen hinzugefügt, wie z. B.
RoutingApplication_Start()
-Registrierung, globaler Filter Anmeldung etc.
ist ein sehr wichtiges Modul, es ist der Kern des Routing-Systems. Die Verantwortung des Routingsystems besteht darin, die Controller- und Aktionsnamen sowie HttpModule
andere UrlRoutingModule
Anforderungsdaten aus der Anforderungs-URL abzurufen. entspricht der aktuellen Anforderungs-URL und der in
registrierten Routing-Vorlage, gibt das erste Routenobjekt UrlRoutingModule
zurück, das mit der aktuellen Anforderung übereinstimmt, und ruft dann das Routing-Datenobjekt basierend auf dem Routenobjekt RouteTable
ab (In ASP.NET MVC müssen Routing-Daten die Namen von Controller und Aktion enthalten), dann Route
, um RouteData
abzurufen, und schließlich RouteData
, um IRouteHandler
abzurufen. IRouteHandler
IHttpHandler
und übergibt in dieser Methode IHttpHandler
an getProcessRequest
Dann erhalten Sie durch Reflexion die Art von ControllerBuilder
. IControllerFactory
Controller
in der 在ASP.NET MVC5中有常用的过滤器有5个: ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点,请求到达服务器后进入处理管道,至浏览器接收服务器响应时为止。 最后附上一张老外绘制的ASP.NET请求管道图,图片来自《ASP.NET MVC Interview Questions and Answers Book》这本书。ControllerBase
-Methode vom Typ Der Aufruf von Controller
wird über die Execute
-Methode von IActionInvoker
ausgeführt. Vor der InvokeAction
-Ausführung werden Action
Modell-Action
-Bindungs- und Modellauthentifizierungsvorgänge durchgeführt. Filters
IAuthenticationFilter
、IAuthorizationFilter
、IActionFilter
、IResultFilter
、I<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a>Filter
。
在ASP.NET MVC中所有的过滤器最终都会被封装为Filter
对象,该对象中FilterScope
类型的属性Scope
和int
类型属性<a href="http://www.php.cn/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}
ActionResult
Action
执行完毕之后会返回ActionResult
类型对象作为对此次请求进行处理的结果,对于不是ActionResult
类型的返回值,ASP.NET MVC会将其转换为ActionResult
类型。请求生命周期
课程推荐
Das obige ist der detaillierte Inhalt vonDetailliertes Tutorial zur ASP.NET MVC5-Anforderungsverarbeitungspipeline und zum Lebenszyklus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!