ASP.NETMVC4でエラーを正しく処理する方法を理解するのに苦労しています。例として、「インターネットアプリケーション」テンプレートを使用して新しいMVC4プロジェクトを作成し、ホームコントローラーを更新していくつかのエラーケースをテストしました。
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Hello";
return View();
}
public ActionResult About()
{
throw new HttpException(401, "Not Authorized");
}
public ActionResult Contact()
{
throw new Exception("Oh no, some error occurred...");
}
}
web.configファイルでcustomErrorsを有効にしました。
<customErrors mode="On"></customErrors>
アプリを実行して[連絡先]をクリックすると、グローバルフィルターとして登録されているため、期待どおりに〜/ Views / Shared/Error.cshtmlビューが表示されます。HandleErrorAttribute
ただし、[バージョン情報]をクリックすると、「ランタイムエラー」という標準のASP.NET黄色のエラーページが表示されます。これらの2つの例外の処理が異なるのはなぜですか。また、属性を使用してインスタンスを取得するにはどうすればよいですか。HttpException
HandleError
CustomErrors構成
理想的には、次のカスタムエラーページが必要です。
- 素敵でユーザーフレンドリーなカスタム404(見つかりません)ページ
- アクセス権がないことをユーザーに通知するカスタム401(許可されていない)ページ(たとえば、モデル内の特定のアイテムのアクセス許可を確認した後にスローされます)
- 他のすべての場合に使用される一般的なエラーページ(標準の黄色のASP.NETページの代わりに)。
上記の各シナリオのビューを備えた新しい「エラー」コントローラーを作成しました。次に、web.configのcustomErrorsを次のように更新しました。
<customErrors mode="On" defaultRedirect="~/Error/Trouble">
<error statusCode="404" redirect="~/Error/NotFound"></error>
<error statusCode="401" redirect="~/Error/NotAuthorized"></error>
</customErrors>
404ページは正常に機能しますが、401ページがまったく表示されません。代わりに、コントローラーのアクションにアクセスしようとすると、 〜/ Error / Troubleビュー(として指定されたもの)が表示されます。defaultRedirect
About
Home
カスタム401リダイレクトページが機能しないのはなぜですか?