カスタム 404 および 500 エラーをプロジェクトに追加する方法を誰かに説明してもらえますか? これをWeb.configに追加してみました:
<customErrors mode="On">
<error code="404" path="404.html" />
<error code="500" path="500.html" />
</customErrors>
カスタム 404 および 500 エラーをプロジェクトに追加する方法を誰かに説明してもらえますか? これをWeb.configに追加してみました:
<customErrors mode="On">
<error code="404" path="404.html" />
<error code="500" path="500.html" />
</customErrors>
これは、私が最近読んだ最高の記事で、 http://benfoster.io/blog/aspnet-mvc-custom-error-pagesにアクセスしようとしている喜びを知らせてくれます 。私の customErrors 要素は次のようになります。
<customErrors mode="Off" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="/404.aspx" />
<error statusCode="500" redirect="/500.aspx"/>
</customErrors>
コントローラーからのアクション メソッドが例外をスローすると、OnException メソッドが呼び出されます。HandleErrorAttribute とは異なり、404 やその他の HTTP エラー コードもキャッチし、customErrors をオンにする必要はありません。
これは、コントローラーで OnException メソッドをオーバーライドすることによって実装されます。
protected override void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
// Redirect on error:
filterContext.Result = RedirectToAction("Index", "Error");
// OR set the result without redirection:
filterContext.Result = new ViewResult
{
ViewName = "~/Views/Error/Index.cshtml"
};
}
filterContext.ExceptionHandled プロパティを使用すると、例外が以前の段階で処理されたかどうかを確認できます (例: HandleErrorAttribute)。
if (filterContext.ExceptionHandled) 戻ります。インターネット上の多くのソリューションでは、基本コントローラー クラスを作成し、OnException メソッドを 1 か所に実装してグローバル エラー ハンドラーを取得することを提案しています。
ただし、これは理想的ではありません。これは、OnException メソッドのスコープが HandleErrorAttribute とほぼ同じくらい制限されているためです。少なくとも 1 つの別の場所で作業を複製することになります。