Как создать пользовательские страницы ошибок 404 в ASP.NET MVC 3?

Каков наилучший способ создания пользовательских страниц ошибок в ASP.NET MVC 3? Особенно меня интересует ошибка 404, но также 403 и другие. Я новичок в MVC Framework, традиционно я из PHP, но я учусь быстро.

Я провел исследование, прежде чем опубликовать этот вопрос, и наткнулся на эту ссылку: Пользовательские страницы ошибок на asp.net MVC3

Это решение кажется простым, хотя когда я пытаюсь реализовать это на своем компьютере, у меня возникает проблема со следующей строкой: IController errorsController = new ErrorsController(); внутри функции Application_Error(). Там написано: "Не удалось найти тип или имя пространства имен" ErrorsController "(отсутствует директива using или ссылка на сборку?").

Заранее благодарим за помощь, которую вы можете оказать.

2 ответа

Решение

Вы должны настроить

<httpErrors>

раздел под

<system.webServer> 

Группа разделов в вашем файле web.config.

Пожалуйста, обратитесь к этой статье:

http://www.iis.net/ConfigReference/system.webServer/httpErrors

Кроме того, вы можете использовать контроллер ошибок, который вы связали в своем вопросе, однако IIS должен управлять начальным потоком. В этом разделе вы можете указать IIS, что он должен выполнять URL-адреса, которыми управляет ваш контроллер.

Также, пожалуйста, позаботьтесь о правильной строке свойства Response.Status в действиях вашего контроллера, поскольку предлагаемое решение возвращает "200 OK", что может сбивать браузеров с толку. Например

public class ErrorsController : Controller
{
    public ActionResult NotFound()
    {
        Response.Status = "404 Not Found";
        return View();
    }

    public ActionResult ServerError()
    {
        byte[] delay = new byte[1];
        RandomNumberGenerator prng = new RNGCryptoServiceProvider();

        prng.GetBytes(delay);
        Thread.Sleep((int)delay[0]);

        IDisposable disposable = prng as IDisposable;
        if (disposable != null) { disposable.Dispose(); }
        Response.Status = "500 Internal Server Error";
        return View();
    }

}

Пример конфигурации:

<httpErrors defaultPath="/error.htm" errorMode="Custom" existingResponse="Replace" defaultResponseMode="ExecuteURL">
      <remove statusCode="500" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="500" path="/errors/servererror/" responseMode="ExecuteURL" />
      <error statusCode="404" path="/errors/notfound/" responseMode="ExecuteURL" />
  </httpErrors>

Вы можете управлять 404.3 и другими, используя атрибут "subStatusCode".

Добавить Application_EndRequest метод к вашему MvcApplication чтобы вызвать просмотр для вашей "не найденной" страницы, в соответствии с Marco's Better-Than-Unicorns MVC 404 Answer.

Другие вопросы по тегам