重定向的错误页面显示死亡的黄色屏幕而不是我的内容

时间:2014-04-01 18:24:23

标签: asp.net asp.net-mvc asp.net-mvc-3

我尝试手动重定向应用程序错误,如下所示:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    Dim routeData = New RouteData()
    routeData.Values.Add("controller", "Error")
    routeData.Values.Add("action", "Index")

    'route to the error controller, preserving the context
    Dim controller As IController = New Controllers.ErrorController()
    controller.Execute(New RequestContext(New HttpContextWrapper(Context), routeData))
End Sub

在我的ErrorController中,我有这个动作:

Function Index() As ActionResult
    'get the exception
    Dim ex = Server.GetLastError()

    ...do something with the exception...

    Return View()
End Function

当我这样做时,即使我试图返回自定义视图,我也只是得到了YSOD。如果我尝试使用Server.Transfer重定向到我的控制器,则Transfer调用将失败。如果我尝试使用TransferRequest,它会转移,但GetLastError会返回null。

那么如何进行这种转移以便(1)我可以返回我想要的视图而不是YSOD; (2)保留最后一个异常?

1 个答案:

答案 0 :(得分:0)

经过一系列的研究,我做了以下更改,现在它似乎有效:

在错误事件中:

    Server.ClearError() '<-------------added this line

    Dim routeData = New RouteData()
    routeData.Values.Add("controller", "Error")
    routeData.Values.Add("action", "Index")
    routeData.Values.Add("exception", Server.GetLastError())  '<-------------added this line

    'route to the error controller, preserving the context
    Dim controller As IController = New Controllers.ErrorController()
    controller.Execute(New RequestContext(New HttpContextWrapper(Context), routeData))

将操作方法​​签名更改为:

    ' GET: /Error
    Function Index(exception As Exception) As ActionResult

这会导致action方法接收异常对象并解决我的问题。