2011-08-03 7 views
0

私のASP.NET MVC 3のアプリでは、私は次のコードを持っている:私は、ページにアクセスしようとしたとき、私は(404が見つかりません)WebExceptionを取得し、しかしcatchを持っていてもASP.NET MVC 3コントローラが例外をスローしますか?

try 
{ 
    return new ProxyResult(new Uri("http://example.org")); 
} 
catch (WebException) 
{ 
} 

を...しかし、WebExceptionがすべき捕らえられるこれがどうやって私のキャッチから飛び出すのか分かりません。

+3

あなたのコードに到達する前に、おそらくIISによって404がスローされているかもしれません。または、tryブロック内にではなく、他のポイントから...その行を実行しているかどうか確認するためにブレークポイントを試しましたか? – forsvarir

+0

いいえ...私はWebExceptionを取得していると言いました。死の黄色い画面。これは、FileNotFoundExceptionとDirectoryNotFoundExceptionのcatchでFileResultを返すときにも発生しました。代わりにFile.Existsを使用するようにコードを変更してから機能しました。 –

答えて

2

あなたtryブロックに入れているすべての方法によっていくつかの標準的な結果ではありませんProxyResultへの単純なコンストラクタ呼び出しである=>それはおそらくですカスタム。期待している例外をスローする可能性のある結果(実際にExecuteResultの呼び出し)を実際に実行すると、コントローラのアクションのかなり後に実行されます。コントローラーの操作に例外がスローされないのはこのためです。あなたは書いたこのカスタムProxyResultクラスのExecuteResultメソッドの中にtry/catchを置くべきです。

+0

何か、ProxyResultは再利用可能と思われます。 Controller.Fileを使用してFileResultを返すことについて考えてみましょう。たとえば、FileNotFoundExceptionsとDirectoryNotFoundExceptionsはどのように処理されますか? –

+0

@ Jake Petroulesは、私の答えで述べたように、カスタムアクション結果の例外は、このカスタムアクション結果のオ​​ーバーライドされた 'ExecuteResult'メソッドの中で処理され、適切に動作する必要があります。 –

+0

私は次のことができることがわかりました: 'var proxy = new ProxyResult(...); proxy.Execute(this.ControllerContext); return_proxy; ' 私はActionResultsがコントローラ自体で実行されているとは思っていませんが実際に悪影響を及ぼすのでしょうか? –

1

アクションのメソッドが返されるまでプロキシの結果は実行されません。あなたがやっていることは、MVCが返った後に処理するための命令を返すことだけです。

使用のHandleErrorは、例外を処理するために属性:

http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx

+0

ああ。では、どうすればこの問題を回避できますか? –

+0

すごく忘れてました - 急いで更新されました:) – Deleted

関連する問題