Controller.OnException вызывается, но возвращает ошибку 500, только в производстве - PullRequest
0 голосов
/ 21 февраля 2019

У меня странное поведение в моем приложении Asp.Net MVC.Я переопределил метод OnException в моем контроллере для обработки ошибок:

protected override void OnException(ExceptionContext filterContext)
{
    var action = filterContext.RouteData.Values["action"].ToString();
    var type = filterContext.Controller.GetType();
    var httpMethod = filterContext.RequestContext.HttpContext.Request.HttpMethod;
    filterContext.ExceptionHandled = true;

    var returnType = GetReturnType(type, action, httpMethod);
    if (returnType == typeof(JsonResult))
        filterContext.Result = HandleJsonError(filterContext.Exception);
    else
        filterContext.Result = HandleError(filterContext.Exception);
}

Приведенный выше код определяет, является ли вызванный метод результатом обычного просмотра или jsonResult, и отображает страницу ошибки или возвращает сообщение об ошибке в json.,Если его Json, он возвращает что-то вроде этого:

{"OK":false,"ErrorMessage":"Error message to the user"}

Итак, когда возникает ошибка, браузер получает код HTTP 200, как будто ошибки не было, но в моем клиентском коде я идентифицирую сообщение об ошибкеи показать его пользователю.

Это нормально работает в моей среде разработки, но когда я загрузил его в производство, асинхронный запрос возвращает ошибку HTTP 500, но возвращаемое содержимое остается тем же JSON.Это означает, что OnException по-прежнему вызывается, но возвращает код 500 вместо 200. Как я могу сделать так, чтобы он вернул 200 на производстве?

...