8

MVC 4 フレームワークで Visual Studio 2012 を使用しており、例外が処理されない場合に、共有フォルダーのわかりやすいエラー ページを表示したいと考えています。(開発者としてエラーの詳細を確認する必要があることはわかっていますが、この設定をテストしたかっただけです)
これまでのところ、web.configのsystem.webセクションに次のコードを追加するとうまくいくはずです

<customErrors mode="On" />

残念ながら、わかりやすいエラー ページの代わりに、次のように表示されます。

「/」アプリケーションでサーバー エラーが発生しました。

ランタイム エラーの説明: サーバーでアプリケーション エラーが発生しました。このアプリケーションの現在のカスタム エラー設定では、アプリケーション エラーの詳細を表示できません。

詳細: この特定のエラー メッセージの詳細をローカル サーバー コンピューターで表示できるようにするには、現在の Web アプリケーションのルート ディレクトリにある "web.config" 構成ファイル内にタグを作成してください。次に、このタグの「mode」属性を「RemoteOnly」に設定する必要があります。詳細をリモート マシンで表示できるようにするには、「モード」を「オフ」に設定してください。

 <!-- Web.Config Configuration File -->

 <configuration>
     <system.web>
         <customErrors mode="RemoteOnly"/>
     </system.web> </configuration> 

注: 現在表示されているエラー ページは、カスタム エラー ページの URL を指すようにアプリケーションの構成タグの「defaultRedirect」属性を変更することにより、カスタム エラー ページに置き換えることができます。

 <!-- Web.Config Configuration File -->

 <configuration>
     <system.web>
         <customErrors mode="On" defaultRedirect="mycustompage.htm"/>
     </system.web> </configuration>


HomeController へのアクションの追加、ルートの設定などの回避策ではなく、説明どおりに実行したいと思います。
これが機能するはずのリファレンスは次のとおり です

「アクション フィルター」の章をスキップして 3:30 分にスキップ)


更新 (リンクが変更されました):
http://pluralsight.com/training/Player?author=scott-allen&name=mvc4-building-m2-controllers&mode=live&clip=0&course=mvc4 -ビルド
(「ASP.NET MVC 4 のコントローラー」という細い線をクリックしてから、「アクション フィルター」をクリックして 5:00 までスキップします)

上記の設定でわかりやすいエラーページが表示されない理由は誰にも分かりますか?
前もって感謝します!

4

5 に答える 5

11

これを行うためのステップバイステップガイドは次のとおりです。

まず、「customErrors」のモード プロパティを「on」に設定します。(これは、カスタム エラーが有効であることを指定します。)

1. Web.config からのコード

<system.web>

    <customErrors mode="On"></customErrors>

</system.web>

以下は私のコントローラ コードです。コントローラ クラスで HandleError 属性を指定しました。また、エラーを生成するために、Index アクションから例外をスローしています。

2. HomeController.cs のコード

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
    throw new Exception("Error Occured !");
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    return View();
    }

    public ActionResult About()
    {
    return View();
    }
}

以下のスクリーンショットでわかるように、Views フォルダーの Shared フォルダー内に定義された Error.cshtml ビューがあります。

3. ソリューション エクスプローラー

ここに画像の説明を入力

Error.cshtml ビュー (以下を参照) は「System.Web.Mvc.HandleErrorInfo」のモデルを使用することに注意してください。</p>

4. Error.cshtml からのコード

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}

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

プロジェクトを実行すると、黄色の死亡画面が表示される代わりに、次の出力が表示されます。

ここに画像の説明を入力

この記事から引用

アップデート :

新しいプロジェクトを作成してこれを試してみてください。これはうまくいくはずです。Error.cshtmlファイルにモデルが含まれていない@model System.Web.Mvc.HandleErrorInfoか、異なるビュー フォルダーに複数の Error.cshtml ページが存在する可能性があると思われます。

于 2012-10-10T17:18:12.467 に答える
5

私は私のものを修正しました.実際には、キャストできない_Layout.cshtmlベースビューモデルに強く型付けされたため、* _Layout *ページをレンダリングHandleErrorInfoできません。そして、このページ バインディング エラーは、 がオンの場合にのみ発生するため、表示されることはありません。これcustomErrorは素晴らしいことです。

于 2013-09-14T11:25:51.513 に答える
5

あなたが経験していることにつながる可能性のある理由の1つ:

「Error.cshtml」がレンダリングされているときに、_layout の何かが原因で例外がスローされています。

追加してテストする

@{
    Layout = null;
}

「Error.cshtml」ファイルに。

于 2014-06-12T14:45:35.593 に答える
2

間違ったweb.configファイルを更新したときにも同じ問題が発生しました。

web.configフォルダ内Viewsとプロジェクトアプリケーションサイトの下にもあります。

web.config解決策は、プロジェクトの下にある更新を行うことです。

于 2013-03-19T12:59:13.837 に答える
-1

これは、Visual Studio Express Edition では機能しません。Visual Studio IDE の Professional または Ultimate Edition を使用している場合に機能します。

于 2014-01-26T06:25:43.723 に答える