我想在我的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):在action方法执行后由asp.net mvc框架调用。
OnActionExecuting(ActionExecutingContext):在action方法执行之前由asp.net mvc框架调用

07-24 20:06