Делаю обработку ошибок (403, 404, 500). Для этого сделал отдельный контроллер и представления.
public class ErrorController : Controller
{
// GET: Error
public ActionResult General(Exception exception)
{
return View("Exception", exception);
}
public ActionResult Http404()
{
return View();
}
public ActionResult Http403()
{
return View();
}
}
В Global.asax.cs
прописал следующий метод:
protected void Application_Error()
{
var exception = Server.GetLastError();
log.Error(exception);
Response.Clear();
var httpException = exception as HttpException;
var routeData = new RouteData();
routeData.Values.Add("controller", "Error");
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 403:
routeData.Values.Add("action", "Http403");
break;
case 404:
routeData.Values.Add("action", "Http404");
break;
default:
routeData.Values.Add("action", "Error");
break;
}
}
else
{
routeData.Values.Add("action", "General");
routeData.Values.Add("exception", exception);
}
Server.ClearError();
Response.TrySkipIisCustomErrors = true;
IController errorsController = new ErrorController();
errorsController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData));
}
Если я в Url ввожу несуществующий контроллер (пример: http://localhost:62693/123
), у меня в браузере отображается HTML-код моего "ошибочного" представления (вместо самого представления).
Если же введенного пути в целом не существует, но в нем контроллер указан правильно (пример: http://localhost:62693/News/123
), то тогда в браузере само представление отображается корректно.
Пробовал разные варианты, но все равно получал только HTML
, если нет контролера. Использовал другой способ обработки ошибок.
web.config
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Error/Http404" />
</httpErrors>
</system.webServer>
Controller
public class ErrorController : Controller
{
public ActionResult PageNotFound()
{
Response.StatusCode = 404;
return View();
}
}
Это помогло мне.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
необходимо проверить удовлетворяет ли строка условиют
Не получается вывести List в консоль, не ругается, просто не выводит