ASP.NET MVC5 要求処理パイプラインとライフサイクルに関する詳細なチュートリアル
リクエスト処理パイプライン
リクエスト パイプラインは、HTTP リクエストの処理に使用されるモジュールの組み合わせです。ASP.NET では、リクエスト パイプラインには、IHttpModule
と IHttpHandler という 2 つのコア コンポーネントがあります。 コード>。すべての HTTP リクエストは <code>IHttpHandler
に入り、IHttpHandler
が最終処理を実行し、IHttpModule
が HttpApplication
オブジェクトをサブスクライブします。イベントの場合、IHttpHandler
が HTTP リクエストを処理する前にリクエストを前処理することも、IHttpHandler
が HTTP リクエストを処理した後にリクエストを再処理することもできます。 IHttpModule
和IHttpHandler
。所有的HTTP请求都会进入IHttpHandler
,有IHttpHandler
进行最终的处理,而IHttpModule
通过订阅HttpApplication
对象中的事件,可以在IHttpHandler
对HTTP请求进行处理之前对请求进行预处理或IHttpHandler
对HTTP请求处理之后进行再次处理。
在IIS7之前,如IIS6或IIS5,请求处理管道分为两个: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
创建或从HttpApplication
对象池(.NET中类似的机制有线程池和字符串拘留池)中取出一个HttpApplication
对象,同时ASP.NET会根据配置文件来初始化注册的HttpModule
,HttpModule
在初始化时会订阅HttpApplication中的事件来实现对HTTP请求的处理。
在ASP.NET MVC5中,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()
方法最先执行,一般在该方法中添加一些配置,如路由注册、全局过滤器的注册等。
Route
一个HTTP请求会经过至少一个HttpModule
的处理。UrlRoutingModule
是非常重要的模块,它是路由系统的核心。路由系统的职责是从请求URL中获取controller和action的名称以及其它请求数据。UrlRoutingModule
根据当前请求的URL和RouteTable
中已注册的路由模板进行匹配并返回第一个和当前请求相匹配的路有对象Route
,然后根据路有对象获取路由数据对象RouteData
(ASP.NET MVC中,路由数据必须包含controller和action的名称),再有RouteData
获取IRouteHandler
最终有IRouteHandler
得到IHttpHandler
。
HttpHandler
一个HTTP请求最终要进入HttpHanler中进行处理,一次HTTP请求只能被一个HttpHandler进行处理。
Controller
IHttpHandler
在ProcessRequest
方法中对当前请求进行处理,在该方法中通过ControllerBuilder
得到IControllerFactory
然后通过反射的方式获取Controller
的类型。
Action
ASP.NET MVC中ControllerBase
是所有Controller
的基类,在类型的Execute
方法中通过IActionInvoker
的InvokeAction
方法来执行对Action
的调用。在Action
IIS6 や IIS5 などの IIS7 より前は、要求処理パイプラインは、IIS 要求処理パイプラインと ASP.NET パイプラインの 2 つに分割されていました。クライアントが静的リソースを要求した場合、IIS パイプラインのみがそれを処理し、ASP.NET が処理します。パイプラインはリクエストを処理しません。 IIS7 以降、2 つのパイプラインは 1 つに結合され、統合パイプラインと呼ばれます。
🎜HttpApplication と HttpModule🎜🎜
🎜 HTTP リクエストが ASP.NET ランタイムによって引き継がれた後、HttpRun<a href="http://www.php.cn/wiki/1268.html" target="_blank">time🎜</a>
は、HttpApplicationFactory
を使用して HttpApplication
を作成するか、HttpApplication
から作成します。 > オブジェクト プール (NET の同様のメカニズムには、スレッド プールや 文字列 🎜 保持プールなど) HttpApplication オブジェクトを作成すると、ASP.NET は HttpModule設定ファイル🎜 /code>、HttpModule
は、初期化中に HttpApplication のイベントをサブスクライブして、HTTP リクエストを処理します。 🎜🎜ASP.NET MVC🎜5 の Global.asax
ファイル内MvcApplication
クラスは、HttpApplication
から継承されて定義されています。クラス: 🎜
🎜
//数值越小,执行优先级越高public enum FilterScope { Action= 30, Controller= 20, First= 0, Global= 10, Last= 100}
Application_Start()
メソッドが最初に実行されます。通常、このメソッドには ルーティング 🎜 登録、グローバル フィルターの登録🎜など🎜🎜ルート🎜🎜
🎜 HTTP リクエストは、少なくとも 1 つのHttpModule
によって処理されます。 UrlRoutingModule
は、ルーティング システムの中核となる非常に重要なモジュールです。ルーティング システムの役割は、コントローラ名とアクション名、およびその他の名前を以下から取得することです。リクエスト URL 🎜リクエスト データ。 UrlRoutingModule
は、現在のリクエストの URL と RouteTable
に登録されているルーティング テンプレートと一致し、現在のリクエストに一致する最初のルート オブジェクトを返しますRoute code> を取得し、ルート オブジェクトに基づいてルート データ オブジェクト <code>RouteData
を取得します (ASP.NET MVC では、ルート データにはコントローラーとアクションの名前が含まれている必要があります)。次に RouteData code> は <code>IRouteHandler
を取得し、最後に IRouteHandler
を取得して IHttpHandler
を取得します。 🎜🎜HttpHandler🎜🎜
🎜 HTTP リクエストは、最終的に HttpHanler に入り、処理されます。 🎜🎜Controller🎜🎜
🎜IHttpHandler
は、ProcessRequest
メソッドで現在のリクエストを処理します。このメソッド、IControllerFactory
は ControllerBuilder
を通じて取得され、Controller
の型はリフレクションを通じて取得されます。 🎜🎜アクション🎜🎜
🎜 ASP.NET MVC のControllerBase
は、すべての Controller
のベースです。 > クラス、タイプの Execute
メソッドで、Action
への呼び出しは IActionInvoker
の InvokeAction
メソッドを通じて実行されます。 >。 Action
が実行される前に、🎜model🎜バインディングとモデル認証の操作が実行されます。 🎜Filters
在ASP.NET MVC5中有常用的过滤器有5个: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
类型。
请求生命周期
ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点,请求到达服务器后进入处理管道,至浏览器接收服务器响应时为止。
最后附上一张老外绘制的ASP.NET请求管道图,图片来自《ASP.NET MVC Interview Questions and Answers Book》这本书。
课程推荐
以上がASP.NET MVC5 要求処理パイプラインとライフサイクルに関する詳細なチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









vue3 では 4 つのライフサイクル関数が変更されました。 Vue3 結合 API では beforeCreated および created フック関数をキャンセルし、代わりにステップ フックを使用するため、これは使用できません。 Vue3 のコンポーネント破棄のフック関数は、destroyed および beforeDestroy から beforeUnmount および unmounted に変更されました。

パイプを介したファイルの読み取りと書き込み: ファイルからデータを読み取り、パイプを介してデータを渡すためのパイプを作成します。 パイプからデータを受信して処理します。 処理されたデータをファイルに書き込みます。 ゴルーチンを使用してこれらの操作を同時に実行し、パフォーマンスを向上させます。

C++ では、関数ポインターには適切な破棄とライフサイクル管理が必要です。これは、関数ポインタを手動で破棄し、メモリを解放することで実現できます。 std::unique_ptr や std::shared_ptr などのスマート ポインターを使用して、関数ポインターのライフ サイクルを自動的に管理します。関数ポインターをオブジェクトにバインドすると、オブジェクトのライフサイクルによって関数ポインターの破棄が管理されます。 GUI プログラミングでは、スマート ポインターを使用するか、オブジェクトにバインドすることで、コールバック関数が適切なタイミングで破棄され、メモリ リークや不整合が回避されます。

サーブレットのライフ サイクルは、サーブレットの作成から破棄までのプロセス全体を指し、次の 3 つの段階に分けることができます: 1. 初期化段階、init() メソッドを呼び出してサーブレットを初期化する; 2. 実行段階 (リクエストの処理)、コンテナは、HTTP リクエストを表す ServletRequest オブジェクトと HTTP レスポンスを表す ServletResponse オブジェクトの作成を要求し、それらをパラメータとしてサーブレットの service() メソッドに渡します; 3. 破棄フェーズ。

Vue3 は現在、フロントエンドの世界で最も人気のあるフレームワークの 1 つであり、Vue3 のライフサイクル機能は Vue3 の非常に重要な部分です。 Vue3 のライフサイクル機能を使用すると、特定の時間に特定のイベントをトリガーすることができ、コンポーネントの高度な制御性が向上します。この記事では、読者が Vue3 のライフ サイクル機能をすぐにマスターできるように、Vue3 のライフ サイクル機能の基本概念、各ライフ サイクル機能の役割と使用法、実装事例を詳しく調べて説明します。 1. Vue3のライフサイクル機能

Go コルーチンのライフ サイクルは、次の方法で制御できます。 コルーチンを作成します。 go キーワードを使用して、新しいタスクを開始します。コルーチンを終了する: すべてのコルーチンが完了するまで待ち、sync.WaitGroup を使用します。チャネル終了信号を使用します。コンテキスト context.Context を使用します。

Go 言語はオープンソースの静的型付け言語であり、シンプルさ、効率性、信頼性などの特徴を持ち、開発者の間でますます愛されています。 Go 言語では、変数はプログラム内のデータ ストレージの最も基本的な形式であり、変数のスコープとライフ サイクルはプログラムの正確さと効率にとって非常に重要です。変数のスコープとは、変数の可視性とアクセス可能性、つまり変数にアクセスできる場所を指します。 Go 言語では、変数のスコープはグローバル変数とローカル変数に分けられます。グローバル変数は関数の外部で定義された変数であり、プログラム全体のどこでも使用できます。

vue3 の生命期間:1、作成前;2、作成済み;3、マウント前;4、マウント済み;5、更新前;6、更新済み;7、破棄前;8、破棄済み;9、アクティブ化済み;10、非アクティブ化済み;11、エラーキャプチャ済み;12 、getDerivedStateFromProps など
