Inhaltsverzeichnis
Anforderungsverarbeitungspipeline" >Anforderungsverarbeitungspipeline
HttpApplication und HttpModule" >HttpApplication und HttpModule
Eine HTTP-Anfrage wird von mindestens einem " >RouteEine HTTP-Anfrage wird von mindestens einem
Eine HTTP-Anfrage gelangt schließlich zur Verarbeitung in den HttpHanler. Eine HTTP-Anfrage kann nur von einem HttpHandler verarbeitet werden. " >HttpHandlerEine HTTP-Anfrage gelangt schließlich zur Verarbeitung in den HttpHanler. Eine HTTP-Anfrage kann nur von einem HttpHandler verarbeitet werden.
In ASP.NET MVC ist " >AktionIn ASP.NET MVC ist
Filters" >Filters
ActionResult" >ActionResult
请求生命周期" >请求生命周期
课程推荐" >课程推荐
Heim Backend-Entwicklung C#.Net-Tutorial Detailliertes Tutorial zur ASP.NET MVC5-Anforderungsverarbeitungspipeline und zum Lebenszyklus

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

Apr 23, 2017 pm 04:29 PM

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);    }
}
Nach dem Login kopieren
-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}
Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

vue3 hat mehrere Lebenszyklusfunktionen geändert vue3 hat mehrere Lebenszyklusfunktionen geändert Jan 13, 2023 pm 05:57 PM

vue3 hat 4 Lebenszyklusfunktionen geändert. Die kombinierte Vue3-API bricht die Hook-Funktionen „beforeCreated“ und „created“ ab und verwendet stattdessen den Step-Hook, der darin nicht verwendet werden kann. Die Hook-Funktionen für die Komponentenzerstörung in Vue3 wurden von destroy und beforeDestroy in beforeUnmount und unmount geändert.

Wie verwende ich Pipes zum Lesen und Schreiben von Dateien in Golang? Wie verwende ich Pipes zum Lesen und Schreiben von Dateien in Golang? Jun 04, 2024 am 10:22 AM

Lesen und Schreiben von Dateien über Pipes: Erstellen Sie eine Pipe, um Daten aus der Datei zu lesen und durch die Pipe zu leiten. Empfangen Sie Daten aus der Pipe und verarbeiten Sie sie. Schreiben Sie die verarbeiteten Daten in die Datei. Verwenden Sie Goroutinen, um diese Vorgänge gleichzeitig auszuführen, um die Leistung zu verbessern

Wie gehe ich mit der Zerstörung und dem Lebenszyklusmanagement von C++-Funktionszeigern um? Wie gehe ich mit der Zerstörung und dem Lebenszyklusmanagement von C++-Funktionszeigern um? Apr 17, 2024 pm 05:48 PM

In C++ erfordern Funktionszeiger eine ordnungsgemäße Zerstörung und Lebenszyklusverwaltung. Dies kann erreicht werden, indem der Funktionszeiger manuell zerstört und der Speicher freigegeben wird. Verwenden Sie intelligente Zeiger wie std::unique_ptr oder std::shared_ptr, um den Lebenszyklus von Funktionszeigern automatisch zu verwalten. Binden Sie den Funktionszeiger an das Objekt, und der Objektlebenszyklus verwaltet die Zerstörung des Funktionszeigers. Bei der GUI-Programmierung stellt die Verwendung intelligenter Zeiger oder die Bindung an Objekte sicher, dass Rückruffunktionen zum richtigen Zeitpunkt zerstört werden, wodurch Speicherlecks und Inkonsistenzen vermieden werden.

Der Servlet-Lebenszyklus ist in mehrere Phasen unterteilt Der Servlet-Lebenszyklus ist in mehrere Phasen unterteilt Feb 23, 2023 pm 01:46 PM

Der Servlet-Lebenszyklus bezieht sich auf den gesamten Prozess von der Erstellung bis zur Zerstörung eines Servlets, der in drei Phasen unterteilt werden kann: 1. Initialisierungsphase, Aufruf der init()-Methode, um das Servlet zu initialisieren; 2. Ausführungsphase (Verarbeitungsanforderungen); Der Container fordert die Erstellung eines ServletRequest-Objekts an, das eine HTTP-Anfrage darstellt, und eines ServletResponse-Objekts, das eine HTTP-Antwort darstellt, und übergibt sie dann als Parameter an die service()-Methode des Servlets. 3. Zerstörungsphase.

Lebenszyklusfunktionen in Vue3: Beherrschen Sie schnell den Lebenszyklus von Vue3 Lebenszyklusfunktionen in Vue3: Beherrschen Sie schnell den Lebenszyklus von Vue3 Jun 18, 2023 am 08:20 AM

Vue3 ist derzeit eines der beliebtesten Frameworks in der Front-End-Welt, und die Lebenszyklusfunktion von Vue3 ist ein sehr wichtiger Teil von Vue3. Die Lebenszyklusfunktion von Vue3 ermöglicht es uns, bestimmte Ereignisse zu bestimmten Zeiten auszulösen und so den hohen Grad der Steuerbarkeit von Komponenten zu verbessern. In diesem Artikel werden die Grundkonzepte der Lebenszyklusfunktionen von Vue3, die Rollen und Verwendung jeder Lebenszyklusfunktion sowie Implementierungsfälle im Detail untersucht und erläutert, um den Lesern zu helfen, die Lebenszyklusfunktionen von Vue3 schnell zu beherrschen. 1. Die Lebenszyklusfunktion von Vue3

Wie kann der Lebenszyklus von Golang-Coroutinen gesteuert werden? Wie kann der Lebenszyklus von Golang-Coroutinen gesteuert werden? May 31, 2024 pm 06:05 PM

Der Lebenszyklus der Go-Coroutine kann auf folgende Weise gesteuert werden: Erstellen Sie eine Coroutine: Verwenden Sie das Schlüsselwort go, um eine neue Aufgabe zu starten. Coroutinen beenden: Warten Sie, bis alle Coroutinen abgeschlossen sind, und verwenden Sie sync.WaitGroup. Verwenden Sie Kanalschließsignale. Verwenden Sie context context.Context.

Variabler Umfang und Lebenszyklus in der Go-Sprache Variabler Umfang und Lebenszyklus in der Go-Sprache Jun 01, 2023 pm 12:31 PM

Die Go-Sprache ist eine statisch typisierte Open-Source-Sprache. Sie zeichnet sich durch Einfachheit, Effizienz und Zuverlässigkeit aus und erfreut sich zunehmender Beliebtheit bei Entwicklern. In der Go-Sprache sind Variablen die grundlegendste Form der Datenspeicherung in Programmen. Der Umfang und der Lebenszyklus von Variablen sind für die Korrektheit und Effizienz des Programms sehr wichtig. Der Gültigkeitsbereich einer Variablen bezieht sich auf die Sichtbarkeit und Zugänglichkeit der Variablen, also darauf, wo auf die Variable zugegriffen werden kann. In der Go-Sprache ist der Variablenbereich in globale Variablen und lokale Variablen unterteilt. Globale Variablen sind außerhalb einer Funktion definierte Variablen und können überall im gesamten Programm verwendet werden

So lösen Sie die Lebenszyklus-Hook-Funktion der Komponente in Uniapp manuell aus So lösen Sie die Lebenszyklus-Hook-Funktion der Komponente in Uniapp manuell aus Oct 21, 2023 am 11:04 AM

Uniapp ist ein plattformübergreifendes Anwendungsentwicklungs-Framework, das gleichzeitig iOS-, Android- und Webanwendungen erstellen kann. Im Anwendungsentwicklungsprozess sind Hook-Funktionen für den Komponentenlebenszyklus ein sehr wichtiger Teil. Sie werden verwendet, um entsprechende Vorgänge an bestimmten Zeitknoten auszuführen. Normalerweise wird die Lebenszyklusfunktion einer Komponente automatisch ausgeführt, wenn ein bestimmtes Ereignis ausgelöst wird, z. B. wenn das Laden der Seite abgeschlossen ist, die Komponente in die Ansicht eintritt, die Komponente aus der Ansicht entfernt wird usw. Manchmal müssen wir jedoch die Lebenszyklus-Hook-Funktion der Komponente manuell auslösen, um ein bestimmtes Ziel zu erreichen

See all articles