ASP.NETMVCController.OnExceptionNotCalled此类提供一般错误处理(这些控制器将返回JSON结果)。当控制器抛出异常时,永远不会调用OnException方法。有没有人看到我做错了什么,或者有更好的方法来处理这种情况?使用MVC1.0基类:publicclassAPIController:Controller{protectedoverridevoidOnException(ExceptionContextfilterContext){//ThisisnevercalledfilterContext.Result=newJsonResult();base.OnException(filterContext);}}继承类:publicclassMyController:APIController{publicAjaxResultForcedException(){thrownewSystemException();如果我正确理解你的问题-你的异常必须在OnException中标记为“已处理”。试试这个:filterContext.ExceptionHandled=true;MSDN文档(http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onexception.aspx)声明OnException方法“在处理异常时调用操作期间发生”.因此,听起来它可能只在操作方法中发生未处理的异常时触发。我创建了一个带有Index操作的新控制器。而OnException方法实际上确实执行了。我也试过抛出SystemException()和OnException方法。publicActionResultIndex(){thrownewNotImplementedException();您是通过单元测试还是通过ASP.NET调用控制器操作?如果您在测试中直接调用此方法,比如通过NUnit,则不会触发OnException:测试框架将处理异常并将其变成失败的测试。我在ASP.NETMVC3项目中遇到了完全相同的问题。事实证明,这是VisualStudio和开发服务器的功能。在调试模式下,您将返回到VisualStudio并获得默认的异常对话框。阻止这种情况发生的一种方法是更改??Web.config的编译模式:为此:您还可以将调试模式设置为true,但通过从visualstudio菜单中选择Startwithoutdebugging选项来测试您的应用程序Valid(通过按Ctrl+F5调用。与HandleErrorAttribute相同的规则适用于Controller.OnExceptionHandleErrorAttribute所需配置在HandleErrorAttributehttps://stackoverflow.com/a/528550/939634中注明,如果web.configcustomError设置为mode="RemoteOnly"并且您正在本地调试或者您有mode="Off"然后异常将不会被处理并且您将看到带有堆栈跟踪的ASP.Net黄色屏幕。如果您设置mode="On"或者您正在查看远程站点并且有mode=“RemoteOnly”OnException方法将正确执行。将[HandleError]属性应用于该类。以上就是C#学习教程的全部内容:ASP.NETMVCController.OnExceptionisnotcalled。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
