2016-07-06 8 views
1

Gibt es eine Möglichkeit, benutzerdefinierte HTTP-Statuscodes (wie 4xx) mit ASP.NET Boilerplate zurückzugeben?Benutzerdefinierte API-Antwort HTTP-Statuscodes mit ABP Framework

Ich möchte benutzerdefinierte anwendungsspezifische HTTP-Codes im Kontext der Validierung festlegen, um mehr Granularität hinzuzufügen. Derzeit würde ABP 200 (OK) für alle Validierungsfehler setzen.

In ABP Quellcode sehen wenigen Orten wie man unten, wo Response.StatusCode von Rahmen wie hier festgelegt ist:

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

Ich denke nur '[DontWrapResult]' kann Ihnen helfen. –

Antwort

1

Was ich tat, schließlich war völlig Filter ABP Ausnahme ersetzen. In meinem benutzerdefinierten Filter konnte ich jeden Statuscode einstellen, den ich brauche.

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

Aus Sicherheitsgründen sollten alle Ausnahmen und Fehler an den Client mit HTTP-200 (oder mit beliebigen Erfolgsergebnissen von 2xx) gesendet werden. Der Grund dafür; Angreifer wie DDOS-Hersteller mögen die Ausnahmeseiten und die Scan-URLs, um einen http-Fehler zu erhalten. DDOS-Angriffe können leicht mit der Ausnahmeseite ausgeführt werden, die überflutet wird. –