我可以看到误解。你想要做的MVC
事情和redirect
控制器动作。
但defaultRedirect
它本身就是一种Web Form
约定,因此受到限制。当您重定向到另一个控制器时,您将丢失您的HttpContext
,从而丢失您的HandleErrorInfo
Object
您的[HandleError]
Attribute 需要View
将其错误消息定向到。按照上面的示例,我假设您有一个Views/Error
文件夹ErrorController
,其中有一个Index
视图。如果您希望您的过滤器上下文将HandleErrorInfo
对象发送到该视图,
试试这个语法:
[HandleError(View="~/Views/Error/Index")]
Public class HomeController : Controller
但是记录呢?!?!?
我怀疑您的意图不仅仅是向用户显示错误堆栈。事实上,我怀疑你根本没有这样的意图。我怀疑您的真正目的是记录您的错误(可能是 db)并向您的用户显示一些乏味的消息。
到目前为止,我所解释的是“在我看来,显示未处理异常的最佳方法是什么”。该[HandleError]
属性对此有好处。
但是当你想进入下一步(记录错误)时,你有几个选择:
1)覆盖您的基本控制器的 On Exception 方法;创建您自己的Controller
从 MVC 控制器类继承但覆盖 On Exception 方法。这种方法可以与 [HandleError] 属性结合使用
2)创建自定义异常处理程序创建您自己的记录错误的异常处理程序。然后,您的异常处理程序可以调用选择的视图,或者可以与过滤器属性一起使用,[HandleError(order=2)]
因为过滤器属性可以采用应用优先级的顺序参数。
Nitin Sawant询问错误视图是什么样的。这
@model System.Web.Mvc.HandleErrorInfo
<h2>Exception details</h2>
<p> Controller: @Model.ControllerName </p>
<p> Action: @Model.ActionName </p>
<p> Exception: @Model.Exception </p>