Как создать пользовательские страницы ошибок 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.