Aktivieren Sie benutzerdefinierte Fehler in Azure

Ich kann IIS nicht so einstellen, dass meine benutzerdefinierten Fehlerseiten für Fehler außerhalb der MVC-Pipeline bereitgestellt werden. Wenn ich eine Ausnahme innerhalb eines Controllers auslöse, ist alles eine Datei, und das Application_Error-Ereignis behandelt Folgendes:

<code>    protected void Application_Error(object sender, EventArgs e)
    {
        var error = Server.GetLastError();

        var routeData = new RouteData();
        routeData.Values["Controller"] = "Error";
        routeData.Values["Area"] = "";
        routeData.Values["Exception"] = error;

        if (error is HttpException)
        {
            switch (((HttpException)error).GetHttpCode())
            {
                case 401:
                    routeData.Values["Action"] = "NotAllowed";
                    break;

                case 403:
                    routeData.Values["Action"] = "NotAllowed";
                    break;

                case 404:
                    routeData.Values["Action"] = "NotFound";
                    break;
                default:
                    routeData.Values["Action"] = "ServerError";
                    break;
            }
        }
        else
        {
            routeData.Values["Action"] = "ServerError";
        }

        Response.Clear();
        Server.ClearError();

        IController controller = new ErrorController();
        controller.Execute(new RequestContext(new HttpContextWrapper(((MvcApplication)sender).Context), routeData));
    }
</code>

Wenn ich jedoch zu einer nicht vorhandenen URL navigiere, behandelt IIS den 404-Fehler (oder einen anderen Fehler), gibt mir die Standard-IIS-Fehlermeldung und ignoriert meine web.config-Einstellungen vollständig:

<code> <system.web>
  <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/error">
    <error statusCode="401" redirect="/error/notallowed" />
    <error statusCode="403" redirect="/error/notallowed" />
    <error statusCode="404" redirect="/error/notfound" />
    <error statusCode="500" redirect="/error/servererror" />
  </customErrors>
</system.web>

<system.webServer>
  <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
    <clear />
    <error statusCode="401" path="/error/notallowed" />
    <error statusCode="403" path="/error/notallowed" />
    <error statusCode="404" path="/error/notfound" />
    <error statusCode="500" path="/error/servererror" />
  </httpErrors>
</system.webServer>
</code>

/ error / * wird von einem Controller in meiner Anwendung verarbeitet. Was kann ich tun, damit IIS den benutzerdefinierten Fehlerpfad ausführt, anstatt mir die Standardfehlerseite einzugeben?

Dies ist ASP.NET MVC 3, das unter Azure ausgeführt wird. Es funktioniert auch nicht unter IIS, aber der Entwicklungsserver führt den Controller aus.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage