【发布时间】: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