【发布时间】:2011-08-31 00:03:20
【问题描述】:
我正在使用 ASP.NET MVC。我在BaseController 中捕获OnException 上的任何未处理的异常,以正确显示好消息。
但是,我在同一个解决方案中有一个 Http Module 项目。如果用户提出错误请求,模块可能会抛出InvalidOperationException。我正在使用 IIS7 集成模式,并且所有配置都已正确配置。我是 IIS 生命周期和 Http 模块异常的新手。
谷歌搜索只找到了使用 HttpMethod 进行异常处理的方法,这与这种情况不同。
问题是如果模块中抛出了异常,MVC 会执行还是不执行?如果确实如此,为什么它不去OnException?以及如何像在 Action 方法中那样在 MVC 中获取异常?
编辑:根据@nickvane 关于应用程序生命周期的回答,我试图更好地解释这种情况。我认为即使是我创建的任何HttpModule 都可能引发任何异常。我希望这个异常由我在UrlRoutingModule 中的 MVC 处理。我在想一个:
- HttpModule 的顺序
- 未处理的异常确实会停止模块并且下一个模块将永远不会运行?
- 如何处理 MVC Web 应用程序 (
UrlRoutingModule) 中的异常,如果只是在UrlRoutingModule之前或之后执行的另一个 HttpModule 中抛出。 - 是否可以通过使用
context.AllErrors或context.Error来获取另一个模块中引发的异常?但我无法得到错误。
我在这个星球上发现的唯一方法是从抛出异常更改为Server.Transfer(),但是其他不是我的模块呢,它仍然抛出异常,我想捕获它。
想一想:我创建了必须返回 JSON 的 MVC Restful API。我可以使用OnException 正确处理 MVC 应用程序中的任何异常,以便任何未处理的异常都将返回类似 {"Error": "An error message here."} 的内容。现在我有可能抛出错误的 HttpModule。该模块不关心 API 和 JSON,它只是抛出一个异常。然后我尝试在 MVC 中捕获这个异常,以 JSON 格式返回。
【问题讨论】:
标签: asp.net exception asp.net-mvc-3 iis-7 httpmodule