MVC自定义错误页面可以保留路由值吗?

Gaz*_*ter 4 error-handling c#-4.0 asp.net-mvc-4

我目前正在处理的MVC项目使用Regions,以便我们可以本地化页面等.

我发现错误页面有问题.我们已在web.config文件中打开自定义错误页面.如果我们在一个页面上让我们说:/ IT /新闻/索引我们得到一个错误,当它重定向时它会转到/错误并且没有附加路由值.

有没有确保错误页面保留langauge routevalue?

我一直在寻找,目前找不到解决方案,并想知道是否有其他人可以帮助或指出我正确的方向?

希望这一切都有道理.任何帮助深表感谢.

Nic*_*cht 5

如果您将物理重定向到/ Error,那么这不是因为MVC HandleErrorAttribute.这可能是由于您的Web.Config已经为错误处理定义了system.web/customErrors.使用HandleErrorAttribute会导致它注入特定视图而不是您通常返回的视图,但默认情况下不会将您重定向到其他操作.问题是由于customErrors重定向时,没有可用的信息告诉您它们来自何处.但是使用HandleErrorAttribute DOES会导致为您填充一些信息.具体来说,它创建一个HandleErrorInfo以用作视图模型并将其传递给您指定的视图.例如,这是在/App_Start/FilterConfig.cs文件中重新命名的一个.

public class FilterConfig
{
    public static void RegisterFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute {View = "Error"});
    }
}
Run Code Online (Sandbox Code Playgroud)

使用HandleErrorAttribute重定向到错误视图时,将为您填充某些信息.HandleErrorInfo视图模型将包含所请求的原始控制器的ControllerName以及原始操作的ActionName.此外,原始请求中的ViewData和TempData将被复制到ViewData和Temp数据中以获取对Error视图的请求.有了这些信息,它应该有你需要的东西.请注意,并非所有错误都发生在Action内部,并且HandleErrorAttribute不会捕获动作中未发生的异常.因此,您仍然需要使用类似customErrors(或者如果您在IIS7 +中执行它们的system.webServer/httpErrors)来处理应用程序中其他位置发生的异常.

这里是CodePlex上HandleErrorAttribute文件的链接,以防你想知道它的作用.HandleErrorAttribute.cs