我的 web.config 中有以下内容:
<customErrors mode="On" defaultRedirect="Error">
<error statusCode="404" redirect="Error/NotFound" />
</customErrors>
我有一个
[HandleError]
在我的 HomeController 类的顶部。为了进行测试,我创建了一个简单地抛出异常的操作。 .它重定向到我的
ErrorController/Index
方法,但是当它到达我的绑定(bind)到 HandleErrorInfo 的 View 时,我的模型为空,所以我以某种方式丢失了对错误的引用。
我确信它与重定向中丢失的错误有关,所以我想看看我是否遗漏了什么,以及是否有人建议我可以在其中查看显示 Stacktrace 和错误消息的 View 。
最佳答案
我可以看出误解。您想要执行 MVC
操作并重定向
到 Controller 操作。
但是 defaultRedirect
本身是一个 Web Form
约定,因此受到限制。当你重定向到另一个 Controller 时,你将失去你的 HttpContext
,从而失去你的 HandleErrorInfo
对象
您的 [HandleError]
属性需要一个 View
来将其错误消息定向到。按照上面的示例,我假设您的 ErrorController
有一个 Views/Error
文件夹,并且其中有一个 Index
View 。如果你想让你的 Filter Context 发送一个 HandleErrorInfo
对象到那个 View ,
试试这个语法:
[HandleError(View="~/Views/Error/Index")]
Public class HomeController : Controller
但是日志记录呢?!?!?
我怀疑您的意图更多 不仅仅是向用户显示错误堆栈。事实上,我怀疑你根本没有这样的意图。我怀疑您的真正目的是记录您的错误(可能是到数据库)并向您的用户显示一些乏味的消息。
到目前为止我所解释的是“在我看来什么是显示未处理异常的最佳[方式]”。 [HandleError]
属性对此很有帮助。
但是当您想进入下一步(记录错误)时,您有几个选择:
1) Override your base controller's On Exception method ;创建您自己的 Controller
继承自 MVC Controller 类,但覆盖 On Exception 方法。这种方法可以与 [HandleError] 属性结合使用
2) Create a custom exception handler创建您自己的记录错误的异常处理程序。然后,您的异常处理程序可以调用选择的 View ,或者可以与 [HandleError(order=2)]
一起工作,因为过滤器属性可以采用顺序参数应用优先级。
Nitin Sawant 询问错误 View 是什么样的。
@model System.Web.Mvc.HandleErrorInfo
<h2>Exception details</h2>
<p> Controller: @Model.ControllerName </p>
<p> Action: @Model.ActionName </p>
<p> Exception: @Model.Exception </p>
关于c# - 在我看来,在 ASP.NET MVC 中什么是最好的显示未处理的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16312588/