2011-05-04 54 views
4

我试图重定向到一个自定义的错误页面(通过特定的控制器)来处理尚未明确处理的HTTP错误代码。MVC 3,defaultRedirect和HandleErrorInfo模型

为了推动这项工作,我有以下的配置

<customErrors mode="On" defaultRedirect="errors" /> 

而对于我的控制器:

public class ErrorsController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

的想法是我最终能处理在这里显示自定义错误的详细信息,在和高于Error.cshtml显示的内容。

我的问题是围绕收到错误信息......我没有HandleErrorInfo例如,我可以找到,也不Service.GetLastError()返回什么...

有谁知道如何产生或者得到一个HandleErrorInfo对象? - 我宁愿使用它,并以某种方式填充以适应其余的错误处理。

感谢,
基隆

回答

3

中的HandleError属性添加到您的控制器(或具体行动):

[HandleError] 
public class HomeController 

然后用这个在你的web.config根据不同的错误控制重定向行为:

<system.web> 
    <customErrors mode="On" defaultRedirect="Error.aspx"> 
    <error statusCode="403" redirect="NoAccess.htm"/> 
    <error statusCode="404" redirect="FileNotFound.htm"/> 
    </customErrors> 
</system.web> 

我相信你可以调整重定向使用自定义/控制器/操作,这应该为您提供HandleErrorInfo希望但从未尝试过。

+0

有趣 - 我已经在(base)控制器上得到了HandleError属性。仍然没有快乐。 – Kieron 2011-05-04 13:34:33

+0

请注意,默认重定向直接转到“〜Views \ Shared \ Error.aspx”,而不是由您控制的任何控制器。 Error.aspx具有要使用的HandleErrorInfo模型。这变成了带有剃须刀引擎的Error.cshtml或Error.vbhtml。 – 2011-05-04 13:39:54

+0

我不认为你可以重定向到一个控制器动作,只有可选地使用HandleErrorInfo模型的页面以比显示异常和调用堆栈更好的方式向用户显示错误。 – 2011-05-04 13:50:22

2

如果您使用Razor将[HandleError]放在控制器的顶部。将名为Error.cshtml的错误页面放入共享文件夹中。

在你的web.config设置随后应该如下:
的customErrors模式=“开”

任何重定向上述声明将不会被使用。

就是这样。未处理的异常将显示您的错误页面。 要在调试模式下测试这个,确保customErrors mode =“On”在您的主web.config中设置。