internal void ProcessRequest(HttpContext context, ActionHandler handler) { if( context == null ) throw new ArgumentNullException("context"); if( handler == null ) throw new ArgumentNullException("handler"); this.HttpContext = context; this.Handler = handler; this.InvokeInfo = handler.InvokeInfo; // 设置 BaseController 的相关属性 SetController(); // 进入请求处理阶段 BeginRequest(); // 安全检查 SecurityCheck(); // 授权检查 AuthorizeRequest(); // 执行 Action object actionResult = ExecuteAction(); // 设置输出缓存 SetOutputCache(); // 处理方法的返回结果 OutputResult(actionResult); }
public static IHttpHandler CreateHandler(InvokeInfo vkInfo) { // MyMMC对异步的支持,只限于返回值类型是 Task 或者 Task<T> // 所以这里只判断是不是Task类型的返回值,如果是,则表示是一个异步Action if (vkInfo.Action.MethodInfo.IsTaskMethod()) { return(TaskAsyncActionHandler.CreateHandler(vkInfo)); } else { return(ActionHandler.CreateHandler(vkInfo)); } }
internal void ProcessRequest(HttpContext context, ActionHandler handler) { if (context == null) { throw new ArgumentNullException("context"); } if (handler == null) { throw new ArgumentNullException("handler"); } this.HttpContext = context; this.Handler = handler; this.InvokeInfo = handler.InvokeInfo; // 设置 BaseController 的相关属性 SetController(); // 进入请求处理阶段 BeginRequest(); // 安全检查 SecurityCheck(); // 授权检查 AuthorizeRequest(); // 执行 Action object actionResult = ExecuteAction(); // 设置输出缓存 SetOutputCache(); // 处理方法的返回结果 OutputResult(actionResult); }
/// <summary> /// 输出结果 /// </summary> /// <param name="context"></param> public void Ouput(HttpContext context) { if (context == null) { throw new ArgumentNullException("context"); } context.Response.Cache.SetCacheability(HttpCacheability.Public); if (MaxAge > 0) { context.Response.Cache.AppendCacheExtension("max-age=" + MaxAge.ToString()); } if (LastModified.Year > 2000) { context.Response.Cache.SetLastModified(LastModified); } if (string.IsNullOrEmpty(ETag) == false) { context.Response.Cache.SetETag(ETag); } // 找回与当前请求有关的ActionExecutor实例。 ActionHandler handler = context.Handler as ActionHandler; if (handler == null) { throw new InvalidOperationException("HttpCacheResult只能与ActionHandler一起配合使用。"); } // 输出内部对象 handler.ActionExecutor.OutputResult(this.Result); }