1. ホーム
  2. asp.net-mvc

[解決済み] ASP.NET MVCのHandleErrorについて

2022-11-03 01:47:54

質問

どのようにすれば [HandleError] フィルタをどのように使用するのですか?

私はWeb.configファイルでcustomErrorsを設定しました。

<customErrors mode="On" defaultRedirect="Error.aspx">
  <error statusCode="403" redirect="NoAccess.htm"/>
  <error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>

で、コントローラクラスの上に[HandleError]をこのように記述します。

[HandleError]
public class DSWebsiteController: Controller
{
    [snip]
    public ActionResult CrashTest()
    {
        throw new Exception("Oh Noes!");
    }
}

そして、自分のコントローラにこのクラスを継承させ、CrashTest()を呼び出します。 Visual Studioはエラーで停止し、f5を押して続行すると、Error.aspx?aspxerrorpath=/sxi.mvc/CrashTest(ここでsxiは使用するコントローラの名前です)にリルートされます。 もちろん、パスは見つからず、quot;Server Error in '/' Application."404が表示されます。

このサイトは preview 3 から 5 に移植されました。 エラー処理以外はすべて動作します (移植にそれほど多くの作業は必要ありませんでした)。 完全に新しいプロジェクトを作成すると、エラー処理は動作するようです。

アイデアはありますか?

--注意--。

この質問は現在3Kビューを超えているので、私が現在(ASP.NET MVC 1.0)使用しているものを入れておくと有益だと思いました。 の中に mvc contribプロジェクト には "RescueAttribute" という素晴らしい属性があります。 あなたもチェックしてみてください;)

どのように解決するのですか?

[HandleError]

クラス (またはアクションメソッド) に HandleError 属性のみを指定した場合、処理されない例外が発生すると、MVC はコントローラのビューフォルダで最初に "Error" という名前の対応するビューを探します。もしそこで見つからなければ、共有ビューフォルダ(デフォルトで Error.aspx ファイルがあるはずです)を探します。

[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]

また、探している例外の種類に関する特定の情報を持つ追加の属性を積み重ねることができます。その時点で、デフォルトの "Error" ビュー以外の特定のビューに Error を指示することができます。

より詳細な情報については、以下を参照してください。 Scott Guthrie のブログ記事 をご覧ください。