Ich versuche, die HTTP-Fehler in einer MVC5 Website auf diese Weise zu behandeln:ASP.NET MVC 5 - Wie kann ich die Route in httpErrors ändern?
web.config:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear/>
<error statusCode="403" path="/language/Error/Details/403" responseMode="ExecuteURL"/>
<error statusCode="404" path="/language/Error/Details/404" responseMode="ExecuteURL"/>
<error statusCode="500" path="/language/Error/Details/500" responseMode="ExecuteURL"/>
</httpErrors>
</system.webServer>
ErrorController.cs:
// GET: Error/Details
public ActionResult Details()
{
/* Setting the language for the errors since it is not possible to handle multi-language errors in the web.config file where the errors are redirected */
if (!CultureHelper.cultures.Contains(base.culture))
{
RouteData.Values["culture"] = CultureHelper.GetCurrentNeutralCulture();
}
/* Redirecting uncontrolled errors to 404 error */
if (RouteData.Values["statusCode"] == null)
{
return RedirectToRoute(new { culture = base.culture, controller = "Error", action = "Details", statusCode = 404 });
}
/* Preparing the model */
ErrorViewModel error = ErrorFactory.Create(Convert.ToInt32(RouteData.Values["statusCode"]));
/* Preparing the view */
base.SetLanguageFromRoute();
return View(error);
}
RouteConfig.cs:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = CultureHelper.GetCurrentNeutralCulture(), controller = "User", action = "Home", id = UrlParameter.Optional }
);
routes.MapRoute(
name: null,
url: "{culture}/Error/Details/{statusCode}",
defaults: new { culture = CultureHelper.GetCurrentNeutralCulture() }
);
}
Mein Problem ist, wenn die Details GET Aktion aufgerufen wird, sobald es erreicht es diese Zeile:
if (RouteData.Values["statusCode"] == null)
Es ist immer true zurück, weil es in RouteData
keine „status“ Schlüssel ist, da es die Standardroute anstelle der Fehlerroute verwendet wird, und die statusCode
wird in der Route mit dem Namen „id übergeben "(Standard-Routenschlüssel)
Ich weiß, ich könnte einfach die Standardroute verwenden und den Statuscode von der ID abfangen, aber ich habe diese benutzerdefinierte Route, wenn ich einen RedirectToRoute
zu einem Fehler von anderen Controllern mache, also möchte ich es hier verwenden. Gibt es eine Möglichkeit zu sagen, <httpErrors>
, dass ich eine andere Route als die Standardroute verwenden möchte?