, 2014年4月22日

ASP.NET MVCでWebサイトを作った際、ルーティングされていないURLにアクセスすると以下の様なエラーが出て残念な気持ちになります。

pic20140422-1

今回はちゃんとした404ページを表示させる方法を紹介します。

実装

以下のサイトを参考にさせて頂きました。

customErrorsで404等のエラーをカスタマイズする

まず、Web.configのsystem.webのタグ内に、以下のようにcustomErrorsを追加します。

<system.web>
  <!-- 省略 -->
  <customErrors defaultRedirect="~/Error/" mode="On">
    <error statusCode="404" redirect="~/Error/NotFound"/>
  </customErrors>
</system.web>

「404が発生したら、~/Error/NotFoundに飛ばしてね」という意味らしいです。その後、Controllersフォルダの中にErrorController.csという新しいクラスを追加します(Hogehogeの部分は環境に合わせて変えて下さい)。

namespace Hogehoge.Controllers
{
    public class ErrorController : Controller
    {
        //
        // GET: /Error/
        public ActionResult Index()
        {
            ViewBag.Title = "Regular Error";
            return View();
        }
        public ActionResult NotFound()
        {
            ViewBag.Title = "Error 404 - File not Found";
            return View("NotFound");
        }
    }
}

これでコントローラの設定ができたので、あとはViewファイルを用意するだけです。ViewsのErrorフォルダの中に、NotFound.cshtmlというファイルを追加します。

<div class="jumbotron">
<h1>404 Not Found.</h1>
<p class="lead">このページは存在していません。<a href="/">トップに戻る</a></p>
</div>

Bootstrap風に適当に作ってみました。これでルーティングしていないURLを打ち込むと、Error/NotFoundにリダイレクトされるようになります。表示結果はこんな感じ。

pic20140422-2

ユーザーに少し優しくなりましたね。

まとめ

実はASP.NETは専門外なので、本当にこの方法が正しいのかはよく分かりません。

詳しい方がいましたら、コメント頂けると幸いですm(_ _)m

CATEGORIES