MVCプロジェクトでApplication_Errorを使用したいのですが、機能しません。以下をGlobal.asaxファイルに追加します。
protected void Application_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
Session["Test"] = "Message:" + objErr.Message.ToString();
}
(セッションはテスト専用です。これを機能させるには、データベースを使用してエラーをログに記録します。)次に、HomeControllerとHome/Index Viewから例外をスローしようとしますが、Debugのみがトリガーされます。
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
throw (new Exception());
return View();
}
私のWebconfigファイルでdefaulterrorページを設定しましたが、ビューにリダイレクトされません。
<customErrors defaultRedirect="Home/Error">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
したがって、最初に、グローバルエラー処理は最後の手段である必要があり、コントローラークラスにはエラーに対する特定のエラーメソッドがあることを覚えておいてください。
protected virtual bool OnError(string actionName,
System.Reflection.MethodInfo methodInfo, Exception exception)
この中で、標準の共有エラービューにリダイレクトできます。
protected override bool OnError(string actionName,
System.Reflection.MethodInfo methodInfo, Exception exception)
{
RenderView("Error", exception);
return false;
}
グローバルアプリケーションエラーで発生する問題は、ビューまたはコントローラーの概念がないため、そこにリダイレクトする場合は、既知のURLを使用する必要があることです。
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
System.Diagnostics.Debug.WriteLine(exception);
Response.Redirect("/Home/Error");
}
butこれを行う必要はありません。 web.configでデフォルトのエラーページを設定した場合、そのリダイレクトは必要ありません。
<customErrors defaultRedirect="Home/Error" />
ただし、存在しないホームコントローラーにエラービューを追加していない限り、次のコードをホームコントローラーに追加します。
public ActionResult Error()
{
return View();
}
次に(賢明な場合は)エラー処理コードをError()メソッドに配置します。これにより、すべての未処理エラーが終了します。
public ActionResult Error()
{
Exception exception = Server.GetLastError();
System.Diagnostics.Debug.WriteLine(exception);
return View();
}
最後に、localhostに接続している場合、デフォルトではカスタムエラーは表示されないことを忘れないでください。したがって、その動作を変更する必要があります
<customErrors mode="On" defaultRedirect="/Home/Error" />