У меня есть приложение ASP.NET MVC3, которое использует JSON для связи с пользовательским интерфейсом Flash.
Я использую ActionFilterAttribute для обработки исключений JSON (из Изящных обработчиков JSON в ASP.NET MVC 2: http://www.dotnetcurry.com/ShowArticle.aspx?ID=496):
public class HandleJsonExceptionAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Exception != null)
{
filterContext.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
filterContext.Result = new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new
{
filterContext.Exception.Message,
}
};
filterContext.ExceptionHandled = true;
}
}
}
Работает нормально, когда выполняется на локальном хосте, подробности из fiddler:
<code>
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 11 Apr 2011 19:05:21 GMT
Content-Length: 34</p>
<p>{"Message":"No está autenticado"}
Но при выполнении изудаленные клиенты, например, в локальной сети, я получаю ответ в «Content-Type: text / html» вместо «Content-Type: application / json;», а содержимое представляет собой стандартную страницу ошибки html:
500 - Внутренняя ошибка сервера. Возникла проблема с ресурсом, который вы ищете, и он не может быть отображен.
<code>
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 11 Apr 2011 19:07:53 GMT
Content-Length: 1208
Что или где мне нужно что-то настроитьчтобы получить ответ JSON на удаленные запросы?
Мне нужно, чтобы флэш-интерфейс получал ошибку http 500, но с сообщением json вместо html.