我想在我的Web API的某些操作之前做一些事情。喜欢扔错误......
public class OnlyAuthorized : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (!IsValidAuthorization(actionExecutedContext.Request.Headers.Authorization?.Parameter))
{
throw new HttpResponseException(HttpStatusCode.Unauthorized);
}
actionExecutedContext.Response?.Headers.Add("Access-Control-Allow-Origin", "*");
base.OnActionExecuted(actionExecutedContext);
}
public bool IsValidAuthorization(string token)
{
return token != null;
}
}
但是它在行动之后被执行,而不是在它之前执行。因此,尽管有时候动作逻辑总是被触及,但是请求没有被授权执行动作。
我该怎么做?
如果无法使用属性执行此操作,我认为我可以处理一个解决方案,我将能够拦截所有POST请求。
答案 0 :(得分:3)
您覆盖OnActionExecuted
而不是OnActionExecuting
见https://msdn.microsoft.com/en-us/library/system.web.http.filters.actionfilterattribute(v=vs.118).aspx
OnActionExecuted(ActionExecutedContext)
:在执行操作方法后由ASP.NET MVC框架调用。
OnActionExecuting(ActionExecutingContext)
:在执行操作方法之前由ASP.NET MVC框架调用