2016-06-05 6 views
3

Я хочу что-то сделать перед некоторыми действиями моего веб-API. Как выбросить ошибку ...Сделайте что-нибудь перед действием на веб-API 2

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.

ответ

3

перенастройка 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 до того, как выполняется метод действия