ActionParameters名称不匹配......有效!为什么?

时间:2013-06-03 19:00:41

标签: c# asp.net-mvc action

我编写了一个ActionFilter,它从会话中加载数据并提供操作所需的对象:

public void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (filterContext.ActionParameters.ContainsKey("ProCalc"))
    {
        throw new InvalidOperationException("Engine already set!");
    }

    // Note: engine is just a simple local variable here!
    Engine engine = SessionHandler.RestoreProCalc();
    filterContext.ActionParameters["ProCalc"] = engine;
}

注意,我通过名称“ProCalc”返回我的对象​​实例。

该操作如下所示:

[RequiresProCalcFilter]
[HttpPost]
public ActionResult Eval(Engine engine)
{
    // code
}

请注意,尽管ActionParameters中的对象类型与实际参数匹配,但我的参数名称不匹配:filter将名称ProCalc下的对象存储,但是action需要参数{{ 1}}待设置。

但令我惊讶的是,这确实有效!但是如何?

我试图通过System.Web.Mvc程序集反汇编我的方式,最后进入engine。但是如果在字典中找不到给定名称的参数,则此方法会抛出异常,因此这是一个死胡同。我也无法在互联网上找到关于ActionDescriptor.ExtractParameterFromDictionary名称如何与实际行动参数绑定的任何文件。

那么这里适用哪些规则,不匹配的名称不会阻止正确调用操作?

0 个答案:

没有答案