Włącz niestandardowe błędy na platformie Azure
Nie mogę ustawić usług IIS, aby obsługiwały moje niestandardowe strony błędów w poszukiwaniu błędów poza potokiem MVC. Jeśli wrzucę wyjątek do kontrolera, to cały plik, zdarzenie Application_Error obsługuje to:
<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>
Jeśli jednak przejdę do nieistniejącego adresu URL, IIS obsłuży błąd 404 (lub dowolny inny błąd), dając mi standardowy komunikat o błędzie IIS i całkowicie ignorując moje ustawienia web.config:
<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 / * jest obsługiwane przez kontroler w mojej aplikacji. Co mogę zrobić, aby IIS wykonał niestandardową ścieżkę błędu, zamiast podawać mi standardową stronę błędu?
To jest ASP.NET MVC 3, działający na platformie Azure. Nie działa również w przypadku zwykłych usług IIS, ale serwer deweloperski uruchamia kontroler.