Я хотел бы добавить заголовок на страницу 500 Internal Server Error - PullRequest
1 голос
/ 14 января 2011

Я использую ASP.NET MVC, и мое приложение работает в основном с использованием запросов JSON.

Если что-то идет не так на стороне сервера, я получаю стандартную страницу «500 Internal Server Error». Это на самом деле хорошо. Но я бы хотел добавить еще одно поле в заголовки ответа: сообщение об исключении.

Моя идея состояла в том, чтобы добавить это переопределение в контроллере:

protected override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);
        filterContext.RequestContext.HttpContext.Response.AppendHeader("Exception", filterContext.Exception.Message);
        filterContext.RequestContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }

К сожалению, я не получаю новое поле в заголовках ответа.

Однако, если сделать это на методах моего контроллера, он работает:

try
{
}
catch (Exception ex)
{
    Response.Headers.Add("Exception", ex.Message);
    Response.StatusCode = (int)HttpStatusCode.InternalServerError;
    return Content(ex.Message);
}

Работает, но не очень аккуратно. Есть ли способ, которым я могу сделать это легко? Спасибо!

1 Ответ

1 голос
/ 14 января 2011

Попробуйте включить пользовательские ошибки в вашем файле web.config:

<system.web>
    <customErrors mode="On" />
</system.web>

При этом отобразится стандартное представление об ошибке ~/Views/Shared/Error.aspx, и ваш пользовательский заголовок будет добавлен к ответу.

Также вы можете использовать filterContext.HttpContext.Response вместо filterContext.RequestContext.HttpContext.Response. Он указывает на тот же объект, просто он имеет немного больше смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...