このような状況の処理方法は混乱しています。AjaxリクエストのAsp.Net MVCアクションで未処理の例外(エラー500の応答)を処理する最良の方法は何ですか?
通常、未処理のASP.Net例外が発生した場合、サーバーは、デフォルトのAsp.NetエラーハンドラまたはカスタムエラーハンドラのいずれかのHTMLメッセージを返します。どちらの場合でも、HTMLが返送されています(通常はページを使いやすくすることをお勧めします)。
しかし、Ajax呼び出しでJSONを返すと予想されるAsp.net MVCコントローラのアクションで未処理の例外が発生しています。 javascriptが返されたページ(意図したJSONの代わりにHTML)を読み込むと、レスポンスをJSONに変換できないためクラッシュします(今はExtJSを使用しています)。例外が発生したときにJsonを返して、エラーが発生したことをユーザーに通知できるようにします。
私は考えることができる唯一のソリューションは、JSONを返すすべてのアクションで次の操作を実行することです:それは私が明らかに悪いである(すべての例外をキャッチする必要があるため、私はその方法好きではない
try { .... }
catch (Exception ex)
{
return Json(new { success = false, msg = ex.Message });
}
理由)、同じ例外処理コードを使用して、すべてのJsonResult
アクションを処理する必要があります(後で変更するのが難しくなります)。
Jsonを返すアクションメソッドでのみ、より適切なエラー結果を返すためのより良い方法がありますが、Ajax以外のWebリクエストに対しては通常のエラーページをユーザーフレンドリーに保ちますか?
代わりにHandleErrorAttributeから継承し、OnExceptionを上書きすることができます。このようにして、フィルタはすべての要求ではなく、例外が発生した場合にのみ起動します。 –
アクションフィルタが役立つようです。これはコードによる回答としてマークしてください! – KallDrexx
@ The Flower Guy:ああ、そうだよ。私はチャンスを得るときにショットを与えるでしょう。ありがとう! – adamjford