[解決済み】ASP.NET MVC 4でカスタムエラーページを動作させる方法
2022-04-02 04:16:05
質問
500、404、403に対してカスタムエラーページを表示させたいのですが、どうすればいいですか?以下は、私が行ったことです。
-
以下のようにweb.configでカスタムエラーを有効にする。
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml"> <error statusCode="403" redirect="~/Views/Shared/UnauthorizedAccess.cshtml" /> <error statusCode="404" redirect="~/Views/Shared/FileNotFound.cshtml" /> </customErrors>
-
登録済み
HandleErrorAttribute
をグローバルアクションフィルタとしてFilterConfig
クラスは以下のようになります。public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new CustomHandleErrorAttribute()); filters.Add(new AuthorizeAttribute()); }
-
上記の各メッセージに対応したカスタムエラーページを作成。500のためのデフォルトのものは、すでに箱から取り出して利用可能でした。
-
各カスタムエラーページのビューで、そのページのモデルを宣言します。
System.Web.Mvc.HandleErrorInfo
500の場合、カスタムエラーページが表示されます。それ以外の場合は表示されません。
何か見落としがあるのでしょうか?
のコードを読むと、カスタムエラーの表示方法はこれだけではなさそうです。
OnException
メソッドの
HandleErrorAttribute
クラスで、500だけ処理しています。
他のエラーに対応するためにはどうしたらよいですか?
どのように解決するのですか?
私の現在のセットアップ(MVC3上ですが、まだ適用できると思います)は
ErrorController
を、使っています。
<system.web>
<customErrors mode="On" defaultRedirect="~/Error">
<error redirect="~/Error/NotFound" statusCode="404" />
</customErrors>
</system.web>
そして、コントローラの内容は以下の通りです。
public class ErrorController : Controller
{
public ViewResult Index()
{
return View("Error");
}
public ViewResult NotFound()
{
Response.StatusCode = 404; //you may want to set this to 200
return View("NotFound");
}
}
そして、ビューはあなたが実装したとおりのものです。しかし、私は、アプリケーションがデバッグモードである場合、スタックトレースとエラー情報を表示するために、ちょっとしたロジックを追加することが多い。なので、Error.cshtmlはこんな感じ。
@model System.Web.Mvc.HandleErrorInfo
@{
Layout = "_Layout.cshtml";
ViewBag.Title = "Error";
}
<div class="list-header clearfix">
<span>Error</span>
</div>
<div class="list-sfs-holder">
<div class="alert alert-error">
An unexpected error has occurred. Please contact the system administrator.
</div>
@if (Model != null && HttpContext.Current.IsDebuggingEnabled)
{
<div>
<p>
<b>Exception:</b> @Model.Exception.Message<br />
<b>Controller:</b> @Model.ControllerName<br />
<b>Action:</b> @Model.ActionName
</p>
<div style="overflow:scroll">
<pre>
@Model.Exception.StackTrace
</pre>
</div>
</div>
}
</div>
関連
-
[解決済み] 403 - 閲覧禁止です。アクセスが拒否されました。提供された資格情報を使用してこのディレクトリまたはページを表示する権限がありません。
-
[解決済み] パフォーマンスカウンターにアクセスすると「レジストリキー'Global'へのアクセスは拒否されました」と表示される。
-
[解決済み] Response.Redirect()を呼び出すと「Cannot redirect after HTTP headers have been sent」と表示されるのですが、なぜでしょうか?
-
[解決済み] WebForm_PostBackOptions のドキュメント [終了しました]。
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] [Solved] ASP.NET MVCで404を適切に処理するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ファイルまたはアセンブリ 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform' を読み込めませんでした。
-
[解決済み] vti_cnf」「_vti_pvt」「_vti_script」「_vti_txt」フォルダは何ですか?
-
[解決済み] ファイルまたはアセンブリをロードできませんでした HRESULTからの例外:0x80131040
-
[解決済み] IIS7.5で静的ファイルハンドラによってスクリプトが提供されない
-
[解決済み] クリスタル・レポート データソースを変更すると「ドキュメントの保存に失敗しました」と表示される
-
[解決済み] http to https rewrite too many redirect loops IIS 7
-
[解決済み] ウェブサイトを展開します。500 - 内部サーバー エラー
-
[解決済み] リンクボタンでjQueryコール__doPostBack
-
[解決済み] IISReset』とは何ですか?
-
[解決済み] cshtmlとaspxの違いは何ですか、なぜですか、どのようなときに選択するのが良いですか?