2016-10-24 2 views
0

私はWebApiプロジェクトを持っています。ここでは、メンテナンスフィルタを実装したいと思っています。 フィルタが2回呼び出されるという問題があります。だから私は正しい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); 
    } 
} 

よろしく

[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

オーバーライド固定応答を提供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

こんにちは、この方法では、私の応答はすべてnullです。 – BHuelse

+0

私はあなたが意味するものを見つけました。 'actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable、 "Maintenance");' OnActionExecutingが動作すると、thx – BHuelse

関連する問題