我修改了路由以将文化包含在网址
中routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = "en-GB", controller = "StyleGuide", action = "Template", id = UrlParameter.Optional },
constraints: new { culture = @"[a-z]{2}-[A-Z]{2}" }
);
我还创建了ErrorController
并在Web.config
中定义了错误页面:
<customErrors mode="On" defaultRedirect="~/Error/Index">
<error statusCode="404" redirect="~/Error/NotFound"/>
</customErrors>
我也在使用mvcSiteMapProvider,所以我已经包含了我的新错误页面,并且能够通过菜单访问它们,因为它使用包含我的文化的URL:localhost/en-GB/Error/NotFound
当抛出异常时,找不到错误页面,因为Web.Config
中定义的重定向缺少文化。
如何在重定向到错误页面时包含文化?
答案 0 :(得分:1)
这是一篇很好的文章,描述了ASP.NET MVC中错误处理方法的可能性和局限性:Exception Handling in ASP.NET MVC
如果您不需要控制器或操作级别异常处理,则可以在Application_Error
事件中执行错误处理。您可以在web.config中关闭自定义错误,并在此事件中执行日志记录和错误处理(包括重定向到正确的页面)。
类似的东西:
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
string action = string.Empty;
if (httpException != null)
{
switch (httpException.GetHttpCode())
{
case 404:
// page not found
action = "NotFound";
break;
//TODO: handle other codes
default:
action = "general-error";
break;
}
}
else
{
//TODO: Define action for other exception types
action = "general-error";
}
Server.ClearError();
string culture = Thread.CurrentThread.CurrentCulture.Name;
Exception exception = Server.GetLastError();
Response.Redirect(String.Format("~/{0}/error/{1}", culture, action));
}