AjaxHandlerFactory の GetHandler メソッドで、最終的に ActionHandler が作成されます。これは HttpHandler であり、パイプラインの 15 番目のステップで呼び出されます (ブログ [Asp.net で独自のサービス フレームワークを作成する] のシーケンスを引用) 。
注: AjaxHandlerFactory の GetHandler メソッドはステップ 10 で呼び出されます。ステップ 12 ではセッションを準備しています (非インプロセス モード)。そのため、セッションの使用はステップ 12 の前に決定する必要があります。
すべてのアクション コードは ActionHandler で実行されます:
internal class ActionHandler : IHttpHandler{ internal InvokeInfo InvokeInfo; public void ProcessRequest(HttpContext context) { // 调用核心的工具类,执行Action ActionExecutor.ExecuteAction(context, this.InvokeInfo); }
ExecuteAction の実装プロセスは次のとおりです:
internal static void ExecuteAction(HttpContext context, InvokeInfo vkInfo) { if( context == null ) throw new ArgumentNullException("context"); if( vkInfo == null ) throw new ArgumentNullException("vkInfo"); // 调用方法 object result = ExecuteActionInternal(context, vkInfo); // 设置OutputCache OutputCacheAttribute outputCache = vkInfo.GetOutputCacheSetting(); if( outputCache != null ) outputCache.SetResponseCache(context); // 处理方法的返回结果 IActionResult executeResult = result as IActionResult; if( executeResult != null ) { executeResult.Ouput(context); } else { if( result != null ) { // 普通类型结果 context.Response.ContentType = "text/plain"; context.Response.Write(result.ToString()); } } }internal static object ExecuteActionInternal(HttpContext context, InvokeInfo info) { // 准备要传给调用方法的参数 object[] parameters = GetActionCallParameters(context, info.Action); // 调用方法 if( info.Action.HasReturn ) return info.Action.MethodInfo.Invoke(info.Instance, parameters); else { info.Action.MethodInfo.Invoke(info.Instance, parameters); return null; } }
SetResponseCache() を呼び出すタイミングについては前に述べましたよね? このタイミングは、まさにアクションの実行後です。 。
OutputCache を設定したら、戻り値を処理します。
前のコードには、別の重要な呼び出しがあります:
// 准备要传给调用方法的参数object[] parameters = GetActionCallParameters(context, info.Action);
[関連推奨事項]
1。特別な推奨事項: 「php Programmer Toolbox」V0.1 バージョンのダウンロード
3. 4.MyMVCボックスでアクションを見つけるプロセスの詳細な説明
5..NET MyMVCフレームワークが戻り値を処理します。チュートリアル
6. メソッドに値を割り当てる方法に関する以上が.NET MyMVCフレームワークでアクションを実行するプロセスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。