在Web API 2上执行操作之前执行某些操作

时间:2016-06-05 14:20:42

标签: c# api asp.net-web-api2 decorator interceptor

我想在我的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请求。

1 个答案:

答案 0 :(得分:3)

您覆盖OnActionExecuted而不是OnActionExecutinghttps://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框架调用