Я работаю над проектом MVC 4.
У меня есть действие, которое выполняется, когда выполняется запрос Ajax Post.
В некоторых случаях, которые я мог точно определить, я должен установить для свойства Status
объекта Response
значение HttpBadRequest
И вернуть объект JSON, который содержит некоторые данные для отображения конечному пользователю.
проблема в том, что я НЕ могу получить объект JSON в методе javascript, я получаю что-то еще. и это потому, что я устанавливаю свойство Status значения Response to HttpBadRequest.
Вот подробности
Действие
// this method will executed when some Ajax Post request.
[HttpPost]
public ActionResult Delete(int id)
{
// some code here ......
// in some case we will determine an error like this
if(error)
{
HttpContext.Response.Clear();
HttpContext.Response.TrySkipIisCustomErrors = true;
HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(new
{
Message = string.Format(format, values),
Status = messageType.ToString()
});
}
}
и я хочу прочитать этот возвращенный объект JSON из функции javascript, подобной этой
JavaScript
function OnDeleteFailed(data) {
debugger;
var try1 = $.parseJSON(data.responseText);
var try2 = JSON.parse(data.responseJSON);
}
проблема в том, что объект JSON НЕ заполняет переменную data
javascript. при отладке кода Javascript я получаю следующее в переменной data
Самое странное, что когда я удаляю эту строчку из Action
HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
затем я правильно получил объект JSON и смог прочитать его следующим образом
Примечание. Я получаю правильный объект JSON, но в другой функции Javascript. (теперь я получаю объект JSON в функции OnDeleteSuccess
, а не в функции OnDeleteFailed
.
Итак, Вопрос: что не так с кодом, поэтому объект JSON не будет получен в функции javascript, если я установлю для свойства StatusCode объекта Response значение BadRequest?
Я много искал ответ (со вчерашнего дня до сегодняшнего дня), и после долгих поисков это самый актуальный вопрос ко мне, но, к сожалению, решение этого вопроса у меня вообще не сработало.
Обновлено
вот фрагмент файла Web.config
, который устанавливает некоторые из httpErrors
IIS. Это обновление, чтобы ответить на предположение, что причина ошибки исходит из этой точки
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Home/PageNotFound" />
</httpErrors>
</system.webServer>
Любые идеи будут оценены.
<customErrors mode="Off" />
младше<system.web>
? - person haim770   schedule 15.10.2015existingResponse
наPassThrough
- person haim770   schedule 15.10.2015TrySkipIisCustomErrors
должны быть эквивалентны. Но попробуй и увидишь - person haim770   schedule 15.10.2015WebAPI
, сделайте что-то вроде -return Request.CreateResponse(HttpStatusCode.BadRequest, myErrorJsonObj);
- person Dayan   schedule 15.10.2015