Asp.net mvc 不同结果类型的MVC Controller.OneException
我试图为我的MVC项目找到理想的异常处理策略。我已经做了以下工作,希望得到一些反馈 问题: 我有不同的结果类型(页面、部分页面、JSON、文件等)Asp.net mvc 不同结果类型的MVC Controller.OneException,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,我试图为我的MVC项目找到理想的异常处理策略。我已经做了以下工作,希望得到一些反馈 问题: 我有不同的结果类型(页面、部分页面、JSON、文件等)Controller.OnException()没有一种简单的方法来识别客户端期望的结果。如果他们需要JSON等等,我会提供一个HTML页面,这会导致显示问题 解决方案: 我有一个抽象的BaseController,它有一些实用功能,如handlejsoneexception(),handlepartialpage exception(),handle
Controller.OnException()
没有一种简单的方法来识别客户端期望的结果。如果他们需要JSON等等,我会提供一个HTML页面,这会导致显示问题
解决方案:
BaseController
,它有一些实用功能,如handlejsoneexception()
,handlepartialpage exception()
,handlepage exception()
,等等。这些功能将:
a) 移交给企业库进行日志记录和通知
b) 以客户端期望的格式设置结果视图
c) 为错误设置适当的Http状态代码AbcController
而是使用AbcPageController
和AbcJsonController
。此控制器的OneException调用基类实用程序处理程序之一您可以使用尊重标准的客户机发送的
Accept
请求头来指示他们支持什么内容类型,并期望得到什么样的回报。例如,如果您正在使用该方法,它将发送以下标题:Accept:application/json,text/javascript,*/*
。如您所见,这里首选的格式是application/json
,您可以在控制器中使用这些信息。我最终放弃了这种方法
已处理的错误将直接从控制器操作返回适当的结果
Controller.OneException中处理的未处理错误将:
a) 将HttpStatusCode设置为500。
b) 使用我们的应用程序错误页面呈现完整的HTML页面
c) 将handled属性设置为true,这样自定义错误页就不会生效
如果调用方需要的不是HTML页面(Ajax JSON、部分页面、XML等),则将检查500代码并忽略HTML内容。谢谢Darin。这看起来很有希望,我可能会走这条路。它适用于JSON,但对于text/html(或/),我无法区分需要html页面的客户端和需要PartialView html片段的客户端。