Обработка ошибок

272
19 сентября 2017, 05:36

Делаю обработку ошибок (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), то тогда в браузере само представление отображается корректно.

Answer 1

Пробовал разные варианты, но все равно получал только 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();
    }
}

Это помогло мне.

READ ALSO
Регулярное выражение. Условие 5 не повторяющихся цифр от 1 до 5

Регулярное выражение. Условие 5 не повторяющихся цифр от 1 до 5

необходимо проверить удовлетворяет ли строка условиют

168
Подмена Assembly

Подмена Assembly

Возможно ли подменить Assembly?

227
Не выводится List в консоль

Не выводится List в консоль

Не получается вывести List в консоль, не ругается, просто не выводит

309
Парсинг JSON с одинаковыми значениями Angular 2

Парсинг JSON с одинаковыми значениями Angular 2

Имеется следующая структура данных:

467