例外をキャプチャし、ユーザーをエラーページにリダイレクトしています。例外メッセージと戻りURLを渡して、何が起こったかをユーザーに通知し、ユーザーが別のページを返すことができるようにします。
try
{
return action(parameters);
}
catch (Exception exception)
{
ErrorViewModel errorModel = new ErrorViewModel();
errorModel.ErrorMessage = "An error occured while doing something.";
errorModel.ErrorDetails = exception.Message;
errorModel.ReturnUrl = Url.Action("Controller", "Action");
return RedirectToAction("Index", "Error", errorModel);
}
これは、すべてのアクションをラップするにはコードが多すぎるようです。エラーにグローバルフィルターを使用しています:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
HandleErrorAttribute attribute = new HandleErrorAttribute();
filters.Add(attribute);
}
そして、私は次のようにweb.configを設定しています。
<customErrors mode="On" defaultRedirect="~/Error/Unknown">
ただし、これは未処理の例外に対してのみ機能します。
例外によって、例外の詳細を保持するパラメーターを取得するエラーコントローラー/アクションにリダイレクトされるようにしたい。アクションごとにリターンURLを指定できるか、何も提供されていない場合はデフォルトを設定できると便利です。