4

我有一个动作过滤器(除其他外),将内容添加到 RouteData。但是,我的操作方法中的参数并未获取该值。任何想法为什么?

动作过滤器:

public class SomeFilter : FilterAttribute, IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var someData = new SomeClass();
        //do stuff
        filterContext.RouteData.Values["someData"] = someData;
     }
}

行动方法:

[SomeFilter]
public ViewResult SomeActionMethod(SomeClass someData)
{
  //someData is null here
}

请注意,我的操作方法中的以下行确实返回了保存在操作过滤器中的数据:

SomeClass isNotNull = RouteData.Values["someData"] as SomeClass;

有谁知道为什么?

4

2 回答 2

3

过滤器附加到操作(方法)。因此,当过滤器运行时,参数的值已经被选择。想象一下如果你问的情况有效:

[SomeFilter]
public ViewResult SomeActionMethod()
{
    // ....
}

public ViewResult SomeActionMethod(SomeClass someData)
{
    // .....
}

您引用http://mysite.com/mycontroller/SomeActionMethod 没有查询参数。那么它应该调用第一个动作。但是,如果您的过滤器要执行您想要的操作,那么在它运行之后,它应该调用第二个操作。但是那个没有过滤器,所以它应该调用第一个。又一轮又一轮。

于 2013-06-27T12:04:01.477 回答
1

这是一篇介绍如何从操作过滤器修改参数值的文章:

http://haacked.com/archive/2010/02/21/manipulating-action-method-parameters.aspx/

于 2014-05-12T21:51:47.320 回答