2016-05-19 6 views
1

In meinem Service-Code, ich meine Objekte sind Validierung und wenn es fehlschlägt, gibt es eine Validation (mit FluentValidation), wirft dies abwechselnd eine Ausnahme mit dem Fehlercode 500Return Validierungsfehler in vNext MVC 6 Web Api

Ohne durch alle meine Methoden zu gehen und eine try..catch hinzuzufügen, ist es möglich, etwas in der mvc-Pipeline hinzuzufügen, das sehen wird, ob eine ValidationException ausgelöst wurde, und wenn ja, eine BadRequest mit der Message der ValidationException zurückgibt?

Wenn ich alle meine Methoden zu aktualisieren, wäre es etwa so aussehen

try 
{ 
    await _service.AddAsync(entity); 

    // return created response 
    return Created(_httpContextAccessor.HttpContext.Request.GetDisplayUrl(), _mapper.Map<DatasheetModel>(entity)); 
} 
catch (ValidationException e) 
{ 
    return BadRequest(e.Message); 
} 

Ist dies möglich, empfohlen, oder sollte ich, wie vor allem meine Methoden aktualisieren gerade?

+0

@David - Diese Frage referenziert Web API 2, die vor ASP.NET Core ist. Diese Frage verweist auf MVC 6, das ASP.NET Core ist. Die beiden sind also völlig unabhängig voneinander. –

+0

@David - ASP.NET Core ist eine vollständige Neuschreiben von ASP.NET und beseitigt System.Web.dll. Da alles vor ASP.NET Core auf System.Web.dll basiert, funktionieren sie nicht überall auf die gleiche Weise. –

+0

Die Idee der Middleware für die Ausnahmebehandlung ist die gleiche, Zeitraum http://stackoverflow.com/a/34312016/2410379 –

Antwort

0

Sie müssen sich nicht überall versuchen. Sie können Middleware für die Ausnahmebehandlung erstellen und sie in die Http-Pipeline injizieren. Middleware ist eines der Hauptkonzepte von ASP.NET Core. Ich habe ein RC1-Projekt auf GitHub veröffentlicht, das demonstriert, wie Middleware in drei einfachen Schritten erstellt wird. Sie können es herunterladen here. In der ReadMe-Datei wird erläutert, wie das Projekt nach relevanten Bereichen des Codes durchsucht wird.

Ich habe auch ein Projekt veröffentlicht, das zeigt, wie benutzerdefinierte Middleware für die Ausnahmebehandlung entwickelt wird. Sie können dieses Projekt herunterladen here. Die ReadMe-Datei erläutert erneut, wie das Projekt nach relevanten Bereichen des Codes durchsucht wird.

0

Die tolle Sache über ASP.NET Core ist, dass sie das Konzept der Middleware auf das nächste Level gebracht haben. Dies kann erreicht werden, wie Sie es wünschen, indem Sie einfach einige custom middleware erstellen und implementieren. Middleware ist in der Lage, jede Anfrage und entsprechende Antwort zu sehen und darauf zu reagieren.

public class ValidationExceptionMiddleware 
{ 
    private readonly RequestDelegate _next; 

    public ValidationExceptionMiddleware(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     // Handle exceptions and propagate appropriate response 
     await _next.Invoke(context); 
    } 
} 

Sobald Sie Ihre Middleware haben verfassten sie im Startup.Configure Methode hinzufügen:

public void Configure(IApplicationBuilder app, 
         IHostingEnvironment env, 
         ILoggerFactory loggerFactory) 
{ 
    // Omitted for brevity... 
    app.UseMiddleware<ValidationExceptionMiddleware>(); 
} 

Es gibt auch Ausnahmefilter, sondern dass Sie mit der Anfrage und Antwort-Pipeline zu interagieren nicht gestattet.