我想在我的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请求。
最佳答案
覆盖OnActionExecuted
而不是OnActionExecuting
见https://msdn.microsoft.com/en-us/library/system.web.http.filters.actionfilterattribute(v=vs.118).aspxOnActionExecuted(ActionExecutedContext)
:在action方法执行后由asp.net mvc框架调用。OnActionExecuting(ActionExecutingContext)
:在action方法执行之前由asp.net mvc框架调用