[解決済み] asp.net MVC3 のカスタムエラーページ
2022-05-11 19:40:12
質問
MVC3 ベースのウェブサイトを開発しており、エラーを処理し、エラーの種類ごとにカスタム ビューをレンダリングするためのソリューションを探しています。主なアクションが "Index" (一般的なエラーページ) で、このコントローラは "Handle500" や "HandleActionNotFound" などのユーザーに表示されるエラー用のいくつかのアクションを持っていると想像してください。
つまり、ウェブサイト上で起こりうるすべてのエラーは、この "Error"コントローラによって処理されます(例:"Controller" または "Action" not found、500、404、dbException など)。
サイトマップファイルを使用して、ウェブサイトのパスを定義しています(ルートではありません)。
この質問はすでに回答されました。これはGweebzへの返信です。
私の最終的なapplicaiton_errorメソッドは次のとおりです。
protected void Application_Error() {
//while my project is running in debug mode
if (HttpContext.Current.IsDebuggingEnabled && WebConfigurationManager.AppSettings["EnableCustomErrorPage"].Equals("false"))
{
Log.Logger.Error("unhandled exception: ", Server.GetLastError());
}
else
{
try
{
var exception = Server.GetLastError();
Log.Logger.Error("unhandled exception: ", exception);
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Errors";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
IController errorsController = new ErrorsController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
catch (Exception e)
{
//if Error controller failed for same reason, we will display static HTML error page
Log.Logger.Fatal("failed to display error page, fallback to HTML error: ", e);
Response.TransmitFile("~/error.html");
}
}
}
どのように解決するのですか?
カスタムエラーの処理方法の一例です。私は
ErrorsController
を定義し、異なる HTTP エラーを処理するアクションを追加しています。
public class ErrorsController : Controller
{
public ActionResult General(Exception exception)
{
return Content("General failure", "text/plain");
}
public ActionResult Http404()
{
return Content("Not found", "text/plain");
}
public ActionResult Http403()
{
return Content("Forbidden", "text/plain");
}
}
をサブスクライブし、その後に
Application_Error
で
Global.asax
を作成し、このコントローラを呼び出します。
protected void Application_Error()
{
var exception = Server.GetLastError();
var httpException = exception as HttpException;
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Errors";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
Response.StatusCode = 500;
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 403:
routeData.Values["action"] = "Http403";
break;
case 404:
routeData.Values["action"] = "Http404";
break;
}
}
IController errorsController = new ErrorsController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
関連
-
[解決済み] Html.DisplayForの構文は何のためにあるのですか?
-
[解決済み] ファイルまたはアセンブリ 'System.Web.WebPages.Razor, Version=2.0.0.0' を読み込めませんでした。
-
[解決済み] 年、月、日のパラメーターは、表現できない DateTime Exception を記述します。
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] razor viewエンジンでの@文字のエスケープ
-
[解決済み】ViewBag、ViewData、TempDataについて
-
[解決済み】ASP.NET MVC3 - textareaで@Html.EditorForを使用する。
-
[解決済み] Razor View-MVC3 ASP.NETでWeb.configからキー値にアクセスする。
-
[解決済み] MVC3 Razor。コードブロック内のhtmlを表示する
-
[解決済み] asp.net mvcのMin/Max値バリデータ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ファイルまたはアセンブリ 'System.Web.WebPages.Razor, Version=2.0.0.0' を読み込めませんでした。
-
[解決済み] 年、月、日のパラメーターは、表現できない DateTime Exception を記述します。
-
[解決済み】ViewBag、ViewData、TempDataについて
-
[解決済み】MVC 3 web.configのwebpages:Enabledの機能は何ですか?
-
[解決済み] Razor View-MVC3 ASP.NETでWeb.configからキー値にアクセスする。
-
[解決済み] StringLength vs MaxLength属性 ASP.NET MVC with Entity Framework EF Code First
-
[解決済み] Razor のページに @using 宣言の代わりに余分な名前空間を追加する方法は?
-
[解決済み] asp.net MVC3 のカスタムエラーページ
-
[解決済み] MVC3 Razor。コードブロック内のhtmlを表示する
-
[解決済み] asp.net mvcのMin/Max値バリデータ