2

Visual Studio 2012 で、のテンプレートを使用して新しい ASP.NET MVC3 プロジェクトを作成しました。次にHomeController、次のものを作成しましたActionResult

public ActionResult Index()
{
    throw new Exception("oops!");
    ViewBag.Message = "hello world";
    return View();
}

次に、HomeController の簡単なビューを追加しました。

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

{root}/web.config に以下を挿入します。

<customErrors mode="On"/>

最後に、次のように変更/Views/Shared/Error.cshtmlしました。

@model System.Web.Mvc.HandleErrorInfo
@{
    //Layout = null;
    ViewBag.Title = "Error";
}

<h2>
    Sorry, an error occurred while processing your request.
</h2>

プロジェクトを実行すると、次のようになります。

500内部サーバーエラー。Web サイトでページを表示できません...

次に、インターネットテンプレートを使用して別の ASP.NET MVC3 プロジェクトを作成することにしました。内部では、上記とまったく同じようにHomeControllerをスローし、Web.config で再度Exceptionオンにしました。customErrorsプロジェクトを実行すると、正しい結果が得られます。

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

2 つのプロジェクトの間で何が欠けている可能性がありますか?

Web.config を 1 行ずつ調べてみましたが、違いはありませんでした。Global.asax ファイルは、両方のプロジェクトで変更されていません。

4

2 に答える 2

0

HandleErrorAttribute をグローバル フィルターとして登録する必要があります。

Global.asax の Application_Start イベントにフィルターを登録します。

    protected void Application_Start()
    {
        ...
        RegisterGlobalFilters(GlobalFilters.Filters);
        ....
    }

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

フィルターをコントローラーまたはアクションに直接適用することもできます。例外が発生した場合のフィルタの動作は、filterContext の Result が Error ビューを指すように設定されます。

于 2013-06-26T20:52:15.933 に答える