Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 3控制器抛出异常,即使我有捕获?_C#_Asp.net Mvc 3_Error Handling - Fatal编程技术网

C# 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返回指令后返回一条指令供其处

在我的ASP.NET MVC 3应用程序中,我有以下代码:

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不“应该”在控制器本身中执行,但这实际上会导致任何不利影响吗?