【发布时间】:2018-08-31 18:30:06
【问题描述】:
我们正在使用 ASP.NET MVC 5.2.3。
捕获表单异常的最佳方法是什么(最正交/解耦,最简单)
The controller for path '/MissingController/MissingAction' was not found or does not implement IController.
和
A public action method 'MissingAction' was not found on controller 'ExistingController'.
这样他们就无法达到我们在HttpApplication.Application_Error() 中的最后手段错误处理?
我们知道一些部分解决方案:
Catching action method not found on controller 提出了两种解决方案来处理丢失操作的情况:
- 在基本控制器中覆盖
HandleUnknownAction()(缺点:所有控制器都必须继承自该控制器)。 - 实现一个自定义
AsyncControllerActionInvoker并在InvokeAction()周围捕获HttpException,但我不相信这种方法,因为它似乎不仅仅捕获了丢失的操作错误。
http://www.jomendez.com/2016/01/20/how-to-create-custom-controller-factory-asp-net/ 建议实现自定义控制器工厂。我不清楚如果找不到控制器,我们将如何重定向到 404 错误页面。
请注意,我们确实通过 Web.config 提供自定义 404 和 500 错误页面:
<system.web>
<customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" defaultRedirect="~/500.aspx">
<error statusCode="404" redirect="~/404.aspx"/>
<error statusCode="500" redirect="~/500.aspx"/>
</customErrors>
...
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="404"/>
<error statusCode="404" path="404.html" responseMode="File"/>
<remove statusCode="500"/>
<error statusCode="500" path="500.html" responseMode="File"/>
</httpErrors>
...
</system.webServer>
但尽管有这些例外情况仍会到达HttpApplication.Application_Error()。
【问题讨论】:
-
在
Application_Error全球注册一个活动怎么样? -
@D-Shih 我们已经覆盖了
Application_Error(),但这并不是重点。我的问题是关于识别然后忽略与未找到控制器/操作相关的异常。
标签: c# asp.net-mvc