2016-10-24 12 views
0

我有一個WebApi項目,我想在其中實施維護過濾器。 現在,我有問題,該過濾器被稱爲兩次。所以我得到了正確的http狀態碼,但過濾器不攔截,並且我的方法在被控制中被調用,通常情況下。如何在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); 
    } 
} 

問候

[編輯]這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

覆蓋所述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