10

MVC サイトのカスタム エラーを設定しようとしています。404 ページは正常に動作していますが、サーバー エラーをテストすると、デフォルトのメッセージが表示されます。

リクエストの処理中に申し訳ありませんが、エラーが発生しました。

私のカスタムページの代わりに。

これをweb.configで設定しました:

<customErrors mode="On"  defaultRedirect="~/Error/500">
    <error statusCode="404" redirect="~/Error/404" />
    <error statusCode="500" redirect="~/Error/500" />
</customErrors>

私のエラーコントローラーは次のとおりです。

public class ErrorController : Controller
{
    [ActionName("404")]
    public ActionResult NotFound()
    {
        return View();
    }

    [ActionName("500")]
    public ActionResult ServerError()
    {
        return View();
    }
}

500ビューの 1 つで例外をスローして、エラー ページをテストしています。

[ActionName("contact-us")]
public ActionResult ContactUs()
{
    throw new DivideByZeroException();
    return View();
}

404 エラーのみが処理されるのはなぜですか? エラーのエラーページを表示するにはどうすればよい500ですか?

4

1 に答える 1

20

これを考え出した..

Global.asax.csプロジェクトの作成時に残っていたのは、定型コードの一部でした。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
   filters.Add(new HandleErrorAttribute());
}

特に:

filters.Add(new HandleErrorAttribute());

HandleErrorAttributeこれにより、すべてのビューにグローバルに適用される新しいインスタンスが作成されます。

カスタマイズなしで、この属性を利用しているときにビューがエラーをスローした場合、MVC は、元のフォルダーにある既定のError.cshtmlファイルを表示します。Shared"Sorry, an error occurred while processing your request."

HandleErrorAttributeのドキュメントから:

既定では、HandleErrorAttribute 属性を持つアクション メソッドが例外をスローすると、MVC は ~/Views/Shared フォルダーにあるエラー ビューを表示します。

この行をコメントアウトすると問題が解決し、500 エラーに対してカスタム エラー ページを使用できるようになりました。

于 2013-09-11T15:28:02.223 に答える