我正在使用ASP.NET WEB API2迁移现有的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,因为我对此进行了覆盖。
请让我知道错误是什么,这样我才能解决这个问题
感谢并问候Venkatesh
发布于 2014-01-03 10:33:23
在大量研究和查看ASP.NET MVC的原生代码之后,我意识到我们不能覆盖单个操作属性。因此,我使用委托消息处理程序,如果需要操作属性,则在操作级别使用它们,而不是在类级别
https://stackoverflow.com/questions/20838725
复制相似问题