【问题标题】:Override ActionFilter attribute is no working in ASP.NET Web APi 2覆盖操作筛选器属性在 ASP.NET Web APi 2 中不起作用
【发布时间】:2014-01-03 10:33:22
【问题描述】:

我正在使用 ASP.NET WEB API 2 迁移现有的 Web 服务。

以下是我使用的一组过滤器

public class ValidateSession : ActionFilterAttribute
{

    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        //var requestMessage = actionContext.Request.Content.ToString();
        if (!actionContext.Request.Headers.Contains("source"))
        {
            actionContext.Request.Headers.Add("source", "1");
        }
        if (!actionContext.Request.Headers.Contains("appstore_session_id"))
        {
            actionContext.Response = actionContext.Request.CreateErrorResponse(System.Net.HttpStatusCode.BadRequest, "Session id is not included in the header");
        }
    }


}

下面是覆盖之前的 ActionFilter 属性的代码

public class OverrideSessionValidation : ActionFilterAttribute, IOverrideFilter
{
    public Type FiltersToOverride
    {
        get { return typeof(ValidateSession); }
    }

    public bool AllowMultiple
    {
        get { return true; }
    }


}

控制器的代码也在下面给出

[ValidateSession]
public class SampleController : ApiController
{
    public string GetSessionValues()
    {
        return "from session vals";
    }
    [OverrideSessionValidation]
    public string GetDefaultVals()
    {
        return "from DefVals";
    }
}

可以看出,我已将验证会话置于类级别,并且对于一种方法,我想覆盖相同的方法。因此,对于第二种方法,我使用了 overrideSessionValidation。虽然

调用了OverrideSessionValidation的FiltersToOverride,我看到也调用了ValidateSession的onActionExcuting。我希望类过滤器 onActionExecuting 不应该被调用,因为我有相同的 Override。

请告诉我错误是什么,以便我解决这个问题

感谢和问候 文卡特斯

【问题讨论】:

  • 您可能覆盖了错误的操作属性。我怀疑您覆盖了System.Web.Mvc 中的那个,但正确的那个在System.Web.Http.Filters 中。
  • 否 因为我已经创建了 ASP.NET MVC 2 EMPTY WEB API 项目,所以我根本没有 MVC 的引用。我 100% 确定我只使用 System.Web.Http.Filters

标签: asp.net asp.net-web-api2


【解决方案1】:

经过大量研究并查看 ASP.NET MVC 的本机代码后,我意识到我们无法覆盖单个操作属性。因此我使用了委托消息处理程序,如果需要操作属性,则在操作级别而不是在类级别使用它们

【讨论】:

  • 我刚刚尝试过类似的方法。这使得操作过滤器覆盖对我来说完全没用,因为我有很多全局操作过滤器并且只想覆盖一个。
猜你喜欢
  • 2015-02-23
  • 2015-03-19
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2017-09-19
  • 1970-01-01
相关资源
最近更新 更多