相关疑难解决方法(0)

为什么我的ActionFilters都没有运行?

我今天早些时候在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();
}
Run Code Online (Sandbox Code Playgroud)

我在调试时永远不会遇到过滤器方法中的断点,并TempData["filter"]null呈现视图时保留一个值.

为什么这不起作用?

asp.net-mvc action-filter

8
推荐指数
2
解决办法
3959
查看次数

使用简单的ActionFilterAttribute运行时出错

开始编写一个简单的过滤器,在每个动作加载时从请求中提取一些东西,从其他堆栈流中复制一些代码,如下所示:

public class TestKeyAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext context)
    {
        if (context.Request.Properties.ContainsKey("test"))
        {
        // do stuff
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后添加其余的属性:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    GlobalConfiguration.Configuration.Filters.Add(new ElmahHandledErrorLoggerFilter());
    filters.Add(new HandleErrorAttribute());
    filters.Add(new TestKeyAttribute());
}
Run Code Online (Sandbox Code Playgroud)

在运行时,会导致此错误:

The given filter instance must implement one or more of the following filter
interfaces: IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter.
Run Code Online (Sandbox Code Playgroud)

我发现的大多数链接都与MVC 3有关,这似乎有效; 然而,我正在使用MVC 4并使用Web API - 我现在需要注册属性吗?

请注意:我不希望附加到Web API控制器的过滤器(将其添加到GlobalConfiguration.Configuration.Filters确实有效),而是普通的Web控制器.

编辑:我知道我可以通过继承IActionFilter而使用OnActionExecuting来实现这一点,我只是好奇为什么这种方法不起作用,因为一堆教程似乎应该说.

asp.net asp.net-mvc

4
推荐指数
1
解决办法
4093
查看次数

标签 统计

asp.net-mvc ×2

action-filter ×1

asp.net ×1