У меня странное поведение в моем приложении 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 на производстве?