Я хочу настроить страницы ошибок на моем веб-сайте asp.net mvc3.
Итак, я нашел этот очень полезный пост: Пользовательские страницы ошибок на asp.net MVC3 и это работает хорошо
Однако мой файл Http404.cshtml
не находится в папке по умолчанию Views
. Он находится в папке с именем BaseViews
. У меня уже есть _Layout.cshtml
и другие представления или частичные представления в этой папке.
Эта папка не проверяется по умолчанию ViewEngine
(он проверяет только папку Views
и всю папку views
моего Areas
). Итак, я использую ViewEngineExtension и добавляю его в коллекцию System.Web.Mvc.ViewEngines
в файле Application_Start()
моего Global.asax
. Все мои приложения работают отлично и могут получить доступ к моему макету и другим BaseViews
материалам.
Я не могу сказать то же самое о Application_Error()
Global.asax
. Этот метод игнорирует предыдущий механизм представления и просматривает только папку представления по умолчанию. Я попытался добавить свой ViewEngineExtension в метод Application_Error()
вот так ViewEngines.Engines.Add(new BaseViewsEngineExtension());
, но это ничего не меняет. Это точно такая же строка, которую я использую в Application_Start()
.
Смотрите мой код для Application_Error()
:
protected void Application_Error()
{
var exception = Server.GetLastError();
var httpException = exception as HttpException;
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Index";
routeData.Values["exception"] = exception;
Response.StatusCode = 500;
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 404:
routeData.Values["action"] = "Http404";
break;
}
}
IController errorController = new ErrorController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorController.Execute(rc);
}
Мой вопрос: как я могу заставить движок просмотра errorController.Excecute(rc)
искать мое представление Http404.cshtml в папке BaseViews
?