2016-07-28 12 views
5

Ich bin relativ neu zu ASP.NET und MVC im Allgemeinen; Ich habe eine ASP.NET MVC App zu ASP.NET MVC Core migriert. Im ersteren Rahmen konnte ich eine Httpexception für die folgenden berüchtigten Fehler behandeln:Benutzerdefinierte Fehlerseite für HTTP-Fehler 404.13 ASP.NET Core MVC

HTTP Error 404.13 - Not Found

The request filtering module is configured to deny a request that exceeds the request content length.

Ich bin bewusst, dass ich die maximale Upload zulässige Länge erhöhen, die derzeit 30 MB standardmäßig ist, aber mein Ziel ist die präsentieren Benutzer mit einer freundlichen Fehlerseite erklären, was gerade passiert ist, nicht das zulässige Limit zu erhöhen.

auf ASP.NET Ich tue dies mit dem folgenden Code auf meinem Global.asax:

private void Application_Error(object sender, EventArgs e) 
{ 
    var ex = Server.GetLastError(); 
    var httpException = ex as HttpException ?? ex.InnerException as HttpException; 
    if (httpException == null) return; 

    if (httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge) 
    { 
     //handle the error 
     Response.Redirect("~/Error/UploadTooLarge"); //Redirect to my custom error page 

    } 
} 

Ich kann nicht scheinen, eine Alternative für diesen in Asp.Net Kern nach mehreren Stunden der Forschung zu finden. Ich glaube, ich muss einige Middleware in meine Startup.cs Configure-Methode einstecken, um eine benutzerdefinierte Fehlerseite zu erreichen, um die HttpException zu behandeln und umzuleiten, aber ich bin in dieser Sache wirklich verloren.

ich es geschaffen hat, erfolgreich die folgende Middleware für benutzerdefinierte verwenden Fehlerseiten für http Fehler wie 404 - nicht gefunden oder 403 - forbiden durch folgende auf meiner configure-Methode:

app.UseStatusCodePagesWithReExecute("/Error/StatusCode{0}"); 

Neben einem Controller:

public class ErrorController : Controller 
{ 
    public IActionResult StatusCode404() 
    { 
     return View(viewName: "CustomNotFound"); 
    } 

    public IActionResult StatusCode403() 
    { 
     return View("CustomForbiden"); 
    } 
} 

Und die entsprechenden Ansichten. Der Fehler 404.13 (Upload zu groß) wird jedoch nicht von meiner aktuellen Middleware verarbeitet. Ich glaube, dass IIS den Fehler präsentiert, da er nicht von der Web-App behandelt wird.

Antwort

0

Sie haben Recht. IIS greift den Fehler auf, bevor er in Ihre Pipeline gelangt. Ich würde empfehlen, das httpErrors Modul in Ihr web.config hinzuzufügen und es auf einer Seite auf der Site zu zeigen.

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="13" /> 
    <error statusCode="404" 
      subStatusCode="13" 
      prefixLanguageFilePath="" 
      path="http://yourwebsite.com/path/to/page" 
      responseMode="Redirect" /> 
    </httpErrors> 
</system.webServer> 
+0

Große Empfehlung für die MVC-Core. Ich habe meine Middleware entfernt und das 'httpErrors'-Modul hinzugefügt, und da die path-Eigenschaft für jeden Fehler einen Wert wie' path = "/ Fehler/CustomAction" erlaubt, kann ich meine benutzerdefinierten Fehlerseiten/-sichten mit einem Fehler-Controller behandeln. –

+0

Dies ist ein Fall, in dem in der Lage sein würde, live/remote mit Visual Studio zu verbinden, wäre großartig. Ansonsten ist es ein Treffer oder Miss und ständig eine Veröffentlichung/Test zu wiederholen und auf das Beste zu hoffen ist ein echter Schwachpunkt. – razblack

+0

Ich bin aber neugierig, was passiert, wenn Sie die Nachricht an den Kunden über ein Knurren System behandeln wollen und Sie diese Umleitung passiert haben. – razblack

Verwandte Themen