mvc执行顺序php中,.NET MyMVC框架执行Action的过程详解

在AjaxHandlerFactory的GetHandler方法中,最后将创建一个ActionHandler,这是一个HttpHandler, 它将在管线的第15个步骤中被调用(引用博客【用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()的时机嘛,这个时机就是在这里:执行完Action后。

设置过OutputCache后,就是处理返回值了。

前面那段代码中,还有一句重要的调用:// 准备要传给调用方法的参数object[] parameters = GetActionCallParameters(context, info.Action);

【相关推荐】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值