Не удается получить сообщение об исключении JSON / тип содержимого при удаленных запросах - PullRequest
1 голос
/ 11 апреля 2011

У меня есть приложение 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.

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Глядя на статью, javascript, похоже, подключен только для локальных запросов. Вам нужно использовать jsonp. (JSON с дополнением). Это позволит вам сделать правильный междоменный запрос, возвращающий объект json.

Дополнительную информацию можно найти здесь и здесь .

0 голосов
/ 25 ноября 2014

У меня была такая же проблема, я решил с этим кодом в web.config

<httpErrors existingResponse="PassTrough"></httpErrors> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...