Как создать пользовательские страницы ошибок 404 в ASP.NET MVC 3? - PullRequest
5 голосов
/ 29 июня 2011

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

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

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

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

Ответы [ 2 ]

15 голосов
/ 29 июня 2011

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

<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".

2 голосов
/ 25 августа 2012

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

...