Exemplo n.º 1
0
		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);
		}
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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);
        }