知识大全 ASP.NET MVC 4框架揭秘:Action的执行(1)[1]
Posted 知
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET MVC 4框架揭秘:Action的执行(1)[1]相关的知识,希望对你有一定的参考价值。
ASP.NET MVC 4框架揭秘:Action的执行(1)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Action的执行( )
作为Controller基类ControllerBase的Execute方法的核心在于对Action方法本身的执行和作为方法返回的ActionResult的执行 两者的执行是通过一个叫做ActionInvoker的组件来完成的
ActionInvoker
同样为ActionInvoker定义了一个接口IactionInvoker 如下面的代码片段所示 该接口定义了一个唯一的方法InvokeAction用于执行指定名称的Action方法 该方法的第一个参数是一个表示基于当前Controller上下文的ControllerContext对象
public interface IActionInvoker
void InvokeAction(ControllerContext controllerContext string actionName)
ControllerContext类型在真正的ASP NET MVC框架中要复杂一些 在这里我们对它进行了简化 仅仅将它表示成对当前Controller和请求上下文的封装 而这两个要素分别通过如下所示的Controller和RequestContext属性表示
public class ControllerContext
public ControllerBase Controller get; set;
public RequestContext RequestContext get; set;
ControllerBase中表示ActionInvoker的同名属性在构造函数中被初始化 在Execute方法中 通过作为方法参数的RequestContext对象创建ControllerContext对象 并通过包含在RequestContext中的RouteData得到目标Action的名称 然后将这两者作为参数调用ActionInvoker的InvokeAction方法
从前面给出的关于ControllerBase的定义中可以看到在构造函数中默认创建的ActionInvoker是一个类型为ControllerActionInvoker的对象 如下所示的代码片段反映了整个ControllerActionInvoker的定义 InvokeAction方法的目的在于实现针对Action方法的执行 由于Action方法具有相应的参数 在执行Action方法之前必须进行参数的绑定 ASP NET MVC将这个机制称为Model的绑定 而这又涉及另一个重要的组件ModelBinder
public class ControllerActionInvoker : IActionInvoker
public IModelBinder ModelBinder get; private set;
public ControllerActionInvoker()
this ModelBinder = new DefaultModelBinder()
public void InvokeAction(ControllerContext controllerContext
stringactionName)
MethodInfo method = controllerContext Controller GetType() GetMethods()
First(m =>string Compare(actionName m Name true) == )
List<object> parameters = new List<object>()
foreach (ParameterInfo parameter in method GetParameters())
parameters Add(this ModelBinder BindModel(controllerContext
parameter Name parameter ParameterType))
ActionResult actionResult = method Invoke(controllerContext Controller
parameters ToArray()) as ActionResult;
actionResult ExecuteResult(controllerContext)
ModelBinder
我们为ModelBinder提供了一个简单的定义 这与在真正的ASP NET MVC中的同名接口的定义不尽相同 如下面的代码片段所示 该接口具有唯一的BindModel方法 根据ControllerContext和Model名称(在这里实际上是参数名称)和类型得到一个作为参数的对象
public interface IModelBinder
object BindModel(ControllerContext controllerContext string modelName
Type modelType)
通过前面给出的关于ControllerActionInvoker的定义可以看到 在构造函数中默认创建的ModelBinder对象是一个DefaultModelBinder对象 由于仅仅是对ASP NET MVC的模拟 定义在自定义的DefaultModelBinder中的Model绑定逻辑比ASP NET MVC的DefaultModelBinder要简单得多 很多复杂的Model机制并未在我们自定义的DefaultModelBinder体现出来
cha138/Article/program/net/201311/16104相关参考
ASP.NETMVC4框架揭秘 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 第章ASPNET+
ASP.NETMVC4框架揭秘:默认实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
ASP.NETMVC4框架揭秘:总体设计 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 第章&n
知识大全 ASP.NET MVC 4框架揭秘:ControllerFactory[2]
ASP.NETMVC4框架揭秘:ControllerFactory[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们
知识大全 ASP.NET MVC 4框架揭秘:ControllerFactory[1]
ASP.NETMVC4框架揭秘:ControllerFactory[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们
知识大全 ASP.NET MVC 4框架揭秘:Controller(1)
ASP.NETMVC4框架揭秘:Controller(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
知识大全 ASP.NET MVC 4框架揭秘:Controller(3)
ASP.NETMVC4框架揭秘:Controller(3) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
知识大全 ASP.NET MVC 4框架揭秘:Controller(2)[2]
ASP.NETMVC4框架揭秘:Controller(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起
知识大全 ASP.NET MVC 4框架揭秘:Controller(2)[1]
ASP.NETMVC4框架揭秘:Controller(2)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起