在网络上采取行动之前先做点什么 API 2
Do something before action on Web API 2
我想在我的 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).aspx
OnActionExecuted(ActionExecutedContext)
:在动作方法执行后由ASP.NET MVC框架调用。
OnActionExecuting(ActionExecutingContext)
:在动作方法执行前由ASP.NET MVC框架调用
我想在我的 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).aspx
OnActionExecuted(ActionExecutedContext)
:在动作方法执行后由ASP.NET MVC框架调用。
OnActionExecuting(ActionExecutingContext)
:在动作方法执行前由ASP.NET MVC框架调用