2

我正在使用 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 相同的。

请让我知道是什么错误,以便我可以解决这个问题

感谢和问候文卡特什

4

1 回答 1

1

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

于 2014-01-03T02:33:22.700 回答