У меня были вроде того же вопроса. При тестировании на локальной машине с использованием localhost, ResponseJSON заполняется. Когда я загрузить свой проект на тестовом сервер и тестирование, мой responseJSON неопределенен и responseTEXT просто давая statusdescription, что я послал:
(это JsonResult, но я сделал это, как ActionResult)
Response.StatusCode = 400;
Response.StatusDescription = "Bad Request - Model State is Invalid";
return Json(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)), JsonRequestBehavior.AllowGet);
и ActionResult конкретно я также пытался:
return new HttpStatusCodeResult(400, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)));
который дал мне кучу ошибок.
Я попытался с JsonResult использовать следующий код, который РАБОТАЕТ локально (но у меня была синтаксическая ошибка в JSON), но не работала на тестовом сервере.
return Json(new { success = false, responseJSON = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)) }, JsonRequestBehavior.AllowGet);
Это последнее испытание (выше), когда я использовал запрос AJAX представить форму модели к контроллеру MVC. Я читал, что это происходит из-за того, что он перекрестный домен, но это не имеет смысла.
Я создал веб-контроллер API и разместил там информацию о методе. Это потому, что я хотел использовать HttpReponseMessage, и я понял, что это тип WebAPI. Получив модель и json и все, чтобы работать вместе, я протестировал и угадал, что?
Когда я использую HttpResponseMessage в качестве возвращаемого типа в WebAPI и вернуться, как это:
return Request.CreateResponse(HttpStatusCode.BadRequest, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)));
responseJSON и responseText как заполнить правильно.
Я не знаю, почему это не работает, и если у кого-то есть ответ на это, пожалуйста, сообщите нам.
Для меня это работа, потому что я чувствую, что это должно было сперва работать.
UPDATE: Использование оригинального кода с MVC контроллер- и добавление
Response.TrySkipIisCustomErrors = true;
сделал responseJSON появляются.
Что вы вернетесь в 'jqXHR' вместо этого? – Jasen
Привет, Ясень, спасибо, что ответ! В машине разработки он возвращает массив responseJSON правильно, а также reponseText с json-строкой, но когда он вызывается с удаленной машины, объект responseJSON не существует, возвращает null, а responseText содержит только сообщение «Bad request», поскольку я подписал код статуса ответа как 400. Я отредактировал вопрос с изображением результата ... –
У вас есть ошибки в консоли? Это имеет какое-то отношение к CORS? Что-нибудь в консоли вроде «Access-Control -Origin ....» – Developer