Tom*_*han 8 asp.net-mvc action-filter
我今天早些时候在ASP.Net MVC中提出了一个问题ActionFilters.事实证明我的问题确实是我ActionFilter甚至没有跑步.我阅读这篇文章的其他内容,我找不到他做的任何我不做的事情.
这是我的代码:
// The ActionFilter itself
public class TestingIfItWorksAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.TempData["filter"] = "it worked!";
        base.OnActionExecuting(filterContext);
    }
}
// The Controller Action with the filter applied
[TestingIfItWorks]
public ActionResult Test()
{
    var didit = TempData["filter"];
    return View();
}
我在调试时永远不会遇到过滤器方法中的断点,并TempData["filter"]在null呈现视图时保留一个值.
为什么这不起作用?
如果它对使用MVC 4/5的任何人有帮助:
如果你得到的命名空间ActionFilters不运行ActionFilterAttribute或IActionFilter错:/sf/answers/959732791/
使用System.Web.Http.Filters的Web API,System.Web.Mvc用于标准的MVC行动.
在问题中,如果你弄错了,过滤器属性将被忽略(没有错误),这使得诊断变得困难.
根据您对另一个答案的评论
通过单元测试进行测试时,不会调用过滤器。如果要调用过滤器,则需要模拟 ControllerActionInvoker。最好是单独测试过滤器本身,然后使用反射来确保过滤器以正确的属性应用于您的操作。我更喜欢这种机制,而不是结合测试过滤器和动作。
原来的
当然override,您的方法上需要一个,否则您实际上并没有替换基类上的方法。我原以为编译器会抱怨您需要 anew或overrideon 。如果您不包含override关键字,它将表现得如同您使用了new. 由于框架将它作为 ActionFilterAttribute 调用,这意味着您的方法将永远不会被调用。
引用自MSDN:
如果派生类中的方法前面没有 new 或 override 关键字,编译器将发出警告,并且该方法的行为就像存在 new 关键字一样。
| 归档时间: | 
 | 
| 查看次数: | 3959 次 | 
| 最近记录: |