Aktivieren Sie benutzerdefinierte Fehler in Azure
Ich bin nicht in der Lage zu setzen IIS Dienste meiner benutzerdefinierte Fehlerseiten für die Fehler außerhalb der MVC pipeline. Wenn ich eine exception werfen, im inneren ein controller es werden alle Datei, die Application_Error event-handles, die:
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));
}
Aber wenn ich durchsuchen, um eine nicht existierende URL, IIS behandelt der 404-Fehler (oder ein anderer Fehler), dass Sie mir den standard-IIS-Fehlermeldung und komplett ignorieren meine web.config Einstellungen:
<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>
/error/* behandelt wird, von einem controller in meiner Anwendung. Was kann ich tun, um IIS ausführen der benutzerdefinierten Fehler Weg, statt der Fütterung mir die standard-Fehler-Seite?
Dies ist ASP.NET MVC-3, Betrieb auf Azure. Es funktioniert nicht, gerade unter IIS, sondern der Entwicklungs-server nicht ausführen der Steuerung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
IIS nicht respektieren defaultResponseMode. Sie müssen responseMode und jeden Fehler, etwa so:
Warum die Standardeinstellungen nicht anwenden, ist mir schleierhaft.
Ich hatte genau dieses problem und ich war auf Azure, das folgende gelöst es für mich:
Fand ich viele-Lösung über web, aber weder war die Arbeit auch für statische Dateien (z.B. für die nicht-vorhandenen 'picture.jpg').
Diese Lösung funktioniert bei mir auf beiden Azure-WebSites und auch auf Azure WebRole-Instanz. Ich benutze
web.config
Transformationen so zu aktualisieren, um Sie eigenen Bedürfnissen entsprechend.Ich benutze ASPX-Seiten für Fehler, so kann ich den richtigen HTTP-response-code (IIS setzt immer HTTP 200, wenn ich verwendet .htm-Seiten)
Datei
~/404.aspx
ist:Datei
~/500.aspx
ist:Passende Teile aus
~/Web.config
enthält:Passende Teile aus
~/Web.Release.config
enthält:Ende.
Stellen Sie sicher, dass Sie diese Einstellung.
Sonst Ihre IIS-Anwendung könnte auch im klassischen Modus ausgeführt wird, statt integriert-Modus, das ist ein IIS-Einstellung, aber ich dachte, integrierten Modus war standardmäßig im Azure - (aber um ehrlich zu sein, habe ich nicht überprüft)