在网络上采取行动之前先做点什么 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框架调用