2016-10-24 15 views
0

У меня есть проект WebApi, где я хочу реализовать средство обслуживания. Теперь у меня есть проблема, что фильтр вызывается дважды. Итак, я получил правильный http statuscode, но фильтр не перехватывает, и мои методы в управляемых вызываются, как правило.Как перехватить фильтр-цепочку для обслуживания в проекте WebApi

Что мне нужно сделать, чтобы мой фильтр правильно перехватывал и не вызывал другого метода?

public class MaintenanceFilter : ActionFilterAttribute 
{ 
    [Dependency] 
    public IUaCRepository UaC { get; set; } 

    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     base.OnActionExecuting(actionContext); 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     if (UaC != null && UaC.CheckMaintenance(WebApiConfig.CONFIG_STANDARD)) 
     { 
      var response = actionExecutedContext.Response; 
      response.StatusCode = HttpStatusCode.ServiceUnavailable; 

      return; 
     } 
     base.OnActionExecuted(actionExecutedContext); 
    } 
} 

наилучшие пожелания

[EDIT] Это soleved моей проблемы:

public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (UaC != null && UaC.CheckMaintenance(WebApiConfig.CONFIG_STANDARD)) 
     { 
      actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, "Maintenance"); 

      return; 
     } 
     base.OnActionExecuting(actionContext); 
    } 

ответ

1

Override OnActionExecuting метод обеспечение фиксированного ответа. Таким образом, он не будет обрабатываться с обработкой запроса.

public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (UaC != null && UaC.CheckMaintenance(WebApiConfig.CONFIG_STANDARD)) 
     { 
      actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, "Maintenance"); 

      return; 
     } 
     base.OnActionExecuting(actionContext); 
    } 
+0

Привет, в этом методе мой ответ - это все. – BHuelse

+0

Я понял, что вы имеете в виду. 'actionContext.Response = actionContext.Request.CreateErrorResponse (HttpStatusCode.ServiceUnavailable, «Maintenance»); в работе OnActionExecuting, thx – BHuelse