Heim  >  Artikel  >  Backend-Entwicklung  >  Detailliertes Tutorial zur ASP.NET MVC5-Anforderungsverarbeitungspipeline und zum Lebenszyklus

Detailliertes Tutorial zur ASP.NET MVC5-Anforderungsverarbeitungspipeline und zum Lebenszyklus

PHPz
PHPzOriginal
2017-04-23 16:29:052790Durchsuche

Anforderungsverarbeitungspipeline

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

Vor IIS7, wie z. B. IIS6 oder IIS5, war die Anforderungsverarbeitungspipeline in zwei Teile unterteilt: IIS-Anforderungsverarbeitungspipeline und ASP.NET-Pipeline. Wenn der Client statische Ressourcen anfordert, werden diese nur von der IIS-Pipeline verarbeitet ASP.NET Die Anfrage wird von der Pipeline nicht verarbeitet. Ab IIS7 werden die beiden Pipelines zu einer kombiniert, der sogenannten integrierten Pipeline.


Die obige Abbildung beschreibt hauptsächlich die Verarbeitung von HTTP-Anfragen durch die ASP.NET-Laufzeit, ohne auf zu viele Details einzugehen.

HttpApplication und HttpModule

Nachdem die HTTP-Anfrage von der ASP.NET-Laufzeit übernommen wurde, wird

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. HttpModuleHttpModuleIn ASP.NET

MVC

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.

RouteEine HTTP-Anfrage wird von mindestens einem

verarbeitet.

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. IRouteHandlerIHttpHandler

HttpHandlerEine HTTP-Anfrage gelangt schließlich zur Verarbeitung in den HttpHanler. Eine HTTP-Anfrage kann nur von einem HttpHandler verarbeitet werden.

Controller

verarbeitet die aktuelle Anfrage in der Methode

und übergibt in dieser Methode IHttpHandler an getProcessRequestDann erhalten Sie durch Reflexion die Art von ControllerBuilder. IControllerFactoryController

AktionIn ASP.NET MVC ist

die Basisklasse aller

in der 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

在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视频教程

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn