2016-07-06 17 views
1

ASP.NETボイラープレートでカスタムHTTPステータスコード(4xxなど)を返す方法はありますか?カスタムAPIの応答ABPフレームワークを使用したHTTPステータスコード

私はカスタムのアプリケーション固有のHTTPコードを検証のコンテキストで設定して、より細分化したいと考えています。現在、ABPはすべての検証エラーに対して200(OK)を設定します。 ABPのソースコードで

Response.StatusCodeはここのようなフレームワークによって設定された場合、以下のようないくつかの場所を参照されています。私は最終的にやった

private void HandleAndWrapException(ExceptionContext context) 
    { 
     if (!ActionResultHelper.IsObjectResult(context.ActionDescriptor.GetMethodInfo().ReturnType)) 
     { 
      return; 
     } 

     context.HttpContext.Response.Clear(); 
     context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; 
     context.Result = new ObjectResult(
      new AjaxResponse(
       _errorInfoBuilder.BuildForException(context.Exception), 
       context.Exception is AbpAuthorizationException 
      ) 
     ); 

     context.Exception = null; //Handled! 
    } 
+0

私は '[DontWrapResult]'だけがあなたを助けることができると思います。 –

答えて

1

を完全にABP例外フィルタを交換しました。カスタムフィルタでは、必要なステータスコードを設定できます。

var filters = Configuration.Modules.AbpWebApi().HttpConfiguration.Filters; 
var currentExceptionFilter = filters 
    .First(h => h.Instance is AbpExceptionFilterAttribute).Instance; 

filters.Remove(currentExceptionFilter); 
filters.Add(IocManager.Resolve<MyApiExceptionFilter>()); 
+1

セキュリティ上の理由から、すべての例外とエラーは、HTTP-200(または任意の2xxの成功結果)を使用してクライアントに送信する必要があります。その理由。 DDoSメーカーのような攻撃者は例外ページやスキャンURLのようにhttpエラーを受け取ることがあります。 DDOS攻撃は、例外ページがいっぱいになると簡単に実行できます。 –

関連する問題