AjaxHandlerFactory의 GetHandler 메서드에서 마침내 파이프라인의 15번째 단계에서 호출되는 HttpHandler인 ActionHandler가 생성됩니다(블로그 [Write your own service Framework with Asp.net]의 시퀀스 인용 ] ).
참고: AjaxHandlerFactory의 GetHandler 메서드는 10단계에서 호출되며 12단계는 Session을 준비하는 중입니다(비진행 모드). 따라서 12단계 전에 Session 사용을 결정해야 합니다.
모든 Action 코드는 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 버전 다운로드
MyMVC 상자에서 Action을 찾는 과정에 대한 자세한 설명 5 .
.NET MyMVC 프레임워크에서 반환 값을 처리하는 방법에 대한 튜토리얼6.
값을 할당하는 방법에 대한 튜토리얼 .NET MyMVC 프레임워크의 메서드
위 내용은 .NET MyMVC 프레임워크에서 Action을 실행하는 과정에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!