мой вопрос касается ответа Pure.Kromes на этот пост < / а>. Я попытался реализовать настраиваемые сообщения об ошибках на своих страницах, используя его метод, но есть некоторые проблемы, которые я не могу объяснить.
a) Когда я вызываю ошибку 404, вводя недопустимый URL-адрес, например localhost: 3001 / NonexistantPage, по умолчанию используется действие ServerError () моего контроллера ошибок, хотя он должен перейти в NotFound (). Вот мой ErrorController:
public class ErrorController : Controller { public ActionResult NotFound() { Response.TrySkipIisCustomErrors = true; Response.StatusCode = (int)HttpStatusCode.NotFound; var viewModel = new ErrorViewModel() { ServerException = Server.GetLastError(), HTTPStatusCode = Response.StatusCode }; return View(viewModel); } public ActionResult ServerError() { Response.TrySkipIisCustomErrors = true; Response.StatusCode = (int)HttpStatusCode.InternalServerError; var viewModel = new ErrorViewModel() { ServerException = Server.GetLastError(), HTTPStatusCode = Response.StatusCode }; return View(viewModel); } }
Мои маршруты ошибок в Global.asax.cs:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.MapRoute(
name: "Error - 404",
url: "NotFound",
defaults: new { controller = "Error", action = "NotFound" }
);
routes.MapRoute(
name: "Error - 500",
url: "ServerError",
defaults: new { controller = "Error", action = "ServerError" }
);
И мои настройки web.config:
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/ServerError">
<error statusCode="404" redirect="/NotFound" />
</customErrors>
...
</system.web>
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/NotFound" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" path="/ServerError" responseMode="ExecuteURL" />
</httpErrors>
...
Представления ошибок расположены в / Views / Error / как NotFound.cshtml и ServerError.cshtml.
б) Одна забавная вещь: когда возникает ошибка сервера, он фактически отображает определенное мной представление ошибок сервера, однако также выводит сообщение об ошибке по умолчанию, а также сообщение о том, что страница ошибки не может быть найдена.
Есть ли у вас какие-нибудь советы, как я могу решить эти две проблемы? Мне очень нравится подход Pure.Kromes к реализации этих сообщений об ошибках, но если есть более эффективные способы достижения этого, не стесняйтесь сказать мне.
Спасибо!
** РЕДАКТИРОВАТЬ: ** Я могу напрямую перейти к своим представлениям через ErrorController, открыв / Error / NotFound или Error / ServerError.
Сами представления содержат только текст, без разметки или чего-то еще.
Как я уже сказал, это действительно работает каким-то образом, но не так, как я предполагал. Кажется, есть проблема с перенаправлением в web.config, но я не смог ее понять.
GlobalFilters.Filters.Add(new HandleErrorAttribute());
- person Nate-Wilkins   schedule 09.11.2012