C# ASP.NET MVC 3控制器抛出异常,即使我有捕获?
在我的ASP.NET MVC 3应用程序中,我有以下代码:C# ASP.NET MVC 3控制器抛出异常,即使我有捕获?,c#,asp.net-mvc-3,error-handling,C#,Asp.net Mvc 3,Error Handling,在我的ASP.NET MVC 3应用程序中,我有以下代码: try { return new ProxyResult(new Uri("http://example.org")); } catch (WebException) { } 然而,当我尝试访问该页面时,我得到一个WebException(404未找到)。。。但是WebException应该被捕获。我不明白这怎么可能从我的捕获中跳出来。代理结果在返回action方法之后才会执行。您所做的只是在MVC返回指令后返回一条指令供其处
try
{
return new ProxyResult(new Uri("http://example.org"));
}
catch (WebException)
{
}
然而,当我尝试访问该页面时,我得到一个WebException(404未找到)。。。但是WebException应该被捕获。我不明白这怎么可能从我的捕获中跳出来。代理结果在返回action方法之后才会执行。您所做的只是在MVC返回指令后返回一条指令供其处理 使用HandleError属性处理异常:
直到返回操作方法后,才会执行代理结果。您所做的只是在MVC返回指令后返回一条指令供其处理 使用HandleError属性处理异常:
您在
try
块中所做的只是对proxysult
的一个简单构造函数调用,顺便说一句,它不是一些标准结果=>它可能是自定义的。结果的实际执行(调用executesult
)方法可能会引发您预期的异常,该方法的实际执行将在很久以后发生,并且不在控制器操作的范围内。这就是为什么在控制器操作中不会抛出异常的原因。您应该将try/catch放在您所编写的自定义ProxyResult
类的ExecuteResult方法中。您在try
块中放置的所有内容都是对ProxyResult
的简单构造函数调用,顺便说一句,它不是一些标准结果=>它可能是自定义的。结果的实际执行(调用executesult
)方法可能会引发您预期的异常,该方法的实际执行将在很久以后发生,并且不在控制器操作的范围内。这就是为什么在控制器操作中不会抛出异常的原因。您应该将try/catch放在您编写的这个自定义ProxyResult
类的ExecuteResult方法中。404可能是IIS在进入代码之前抛出的。。。或者从另一个角度,不是在试块内。。。你试过中断它看它是否在运行那行吗?没有。。。就像我说的,我有一个网络例外。死亡的黄屏。当返回带有FileNotFoundException和DirectoryNotFoundException捕获的FileResult时,也会发生这种情况。我将代码改为使用File.Exists,然后它工作了。404可能是由IIS抛出的,在它到达您的代码之前。。。或者从另一个角度,不是在试块内。。。你试过中断它看它是否在运行那行吗?没有。。。就像我说的,我有一个网络例外。死亡的黄屏。当返回带有FileNotFoundException和DirectoryNotFoundException捕获的FileResult时,也会发生这种情况。我将代码改为使用File.Exists,然后它就工作了。问题是,ProxyResult应该是可重用的。考虑使用Controller.File返回FileResult,例如,如何处理FileNotFoundExceptions和DirectoryNotFoundExceptions?@Jake Petroules,如我在回答中所述,自定义操作结果中的异常应在该自定义操作结果的重写executesult
方法中处理,并采取适当的行动。我发现我可以执行以下操作:var proxy=new proxysult(…);proxy.Execute(this.ControllerContext);返回代理代码>我知道ActionResult不应该在控制器本身中执行,但这会不会造成任何负面影响?问题是,ProxyResult应该是可重用的。考虑使用Controller.File返回FileResult,例如,如何处理FileNotFoundExceptions和DirectoryNotFoundExceptions?@Jake Petroules,如我在回答中所述,自定义操作结果中的异常应在该自定义操作结果的重写executesult
方法中处理,并采取适当的行动。我发现我可以执行以下操作:var proxy=new proxysult(…);proxy.Execute(this.ControllerContext);返回代理代码>我知道ActionResults不“应该”在控制器本身中执行,但这实际上会导致任何不利影响吗?