【问题标题】:MVC API2 ActionFilterAttribute not called未调用 MVC API2 ActionFilterAttribute
【发布时间】:2017-02-09 18:16:28
【问题描述】:

我正在为这种代码的平静而苦苦挣扎:

public class MultiDatabaseAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
    }
}

我想在我的 API 中对某些 ActionResult 执行 OnActionExecuting。这是我的 API 中的一个方法:

[MultiDatabase]
public Website Get(int id)
{
    return _websites.Get(id);
}

它不起作用。无论我尝试什么,都不会调用方法属性。根据网站http://www.strathweb.com/2015/06/action-filters-service-filters-type-filters-asp-net-5-mvc-6/,这应该可以工作。

根据question,我必须将属性添加到 Global.asax。也没有用。

谁能帮帮我?

谢谢

【问题讨论】:

  • 这里的Website 是什么?这真的是控制器中的动作方法吗?
  • 这是一个正在返回的对象。另一端会将其检索为 JSON。它是 ApiController 中的一个方法。
  • 您从这里继承了ActionFilterAttribute 的哪个版本?请注意,MVC 和 WebAPI 有不同的版本。
  • Assembly System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35... 有帮助吗?

标签: c# asp.net-mvc attributes


【解决方案1】:

您从错误的基类继承了您的属性。 MVC 和 WebAPI 有不同的对象(至少在 ASP.Net Core 将它们合并为一个之前)。确保您的属性中有正确的导入:

using System.Web.Http.Filters;

或者使用完整的命名空间:

public class MultiDatabaseAttribute : System.Web.Http.Filters.ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        base.OnActionExecuting(actionContext);
    }
}

【讨论】:

  • 有效! (现在不能除了anwser,我必须等待)。题外话:我是否可以注册该属性,以便在调用某个操作时始终使用该属性,而无需将此属性放在 100 个操作上?
  • 在您的WebApiConfig.cs 中,添加这一行:config.Filters.Add(new MultiDatabaseAttribute());
  • 呃,我找错地方了。再次感谢!
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多