MVC5 возвращает статус 500 пользовательской страницы, пробовал обычные решения

Я хочу иметь возможность управлять перенаправлением на другую страницу или возвращать другое представление об определенных обработанных ошибках. Я могу создавать пользовательские страницы со статусом 404, 403, 418, и страница отображается нормально, но когда я пытаюсь вернуть 500, она переопределяет ее страницей по умолчанию. Я пробовал нормальные решения. Использование TrySkipIisCustomErrors для перехвата IIS ошибки 500. У меня нет filter.cs и я не регистрирую фильтры в application_Start(). Я пробовал добавлять и удалять [HandleError] из метода, и это не имеет значения.

[NonAction]
    [HandleError]
    private ActionResult error(Exception e)
    {
        Response.StatusCode = 500;
        Response.StatusDescription = "Internal server error: " + e.Message;
        Response.TrySkipIisCustomErrors = true;

        ErrorModel errorModel = new ErrorModel();
        errorModel.error = e.Message;
        return View(viewName: "error", model: errorModel);
    }

Это метод, на который перенаправляется ошибка и который возвращает отображаемое представление. Я могу изменить первую строку на другие StatusCodes, и она работает нормально, но 500 — нет.




Ответы (1)


Оказывается, это была странная случайность с Razor. RenderBody() добавляет теги <body>, если их нет в документе, по-видимому, если вы не вернете 500 в своем заголовке статуса. Затем он не добавляет теги <body>, и HTML возвращает искаженный формат, который вызывал мою проблему.

person ccwscott    schedule 11.10.2016