Рассмотрим следующие действия контроллера, из которых существует немало примеров вокруг сети:Насколько надежным является HttpStatusCodeResult.StatusDescription?
public ActionResult Fail()
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "My helpful message");
}
Теперь мы будем называть это действие с помощью Ajax и отображение результатов на странице;
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
document.body.innerHTML = xmlhttp.response;
}
}
xmlhttp.open("POST", "/log/fail", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send();
</script>
</head>
<body>
</body>
</html>
Когда я открываю эту страницу в скажем Chrome или Firefox на моем Windows 10 устройства, я получаю полный отчет об ошибке с My полезных сообщениями на видном месте.
Однако, когда я открываю эту страницу на устройстве iOS (протестирован с iPad Air, iPhone 5S), сообщение не получено в полученном ответе.
Это заставляет меня думать, что вы не можете зависеть от HttpStatusCodeResult.StatusDescription
, который должен быть возвращен клиенту, а не для обнаружения проблемы с приложением и ответа с помощью new HttpStatusCodeResult()
, вместо этого модели, отправленные обратно на передний конец, должны быть расширены для включения любые сообщения об ошибках, связанные с конкретным приложением, и отправляются обратно нормально (HttpStatusCode.OK
). Это так?
Обратите внимание, что это распространяется на AngularJs, где я его первоначально нашел, и jQuery;
AngularJS
$http.post('/log/fail')
.then(function (response) {
// successful
}, function (response) {
document.body.innerHTML = response.statusText; // 'Bad Request' in iOS
});
JQuery
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$.ajax({ url: '/log/fail', method:'POST' }).error(function (response) {
document.body.innerHTML = response.statusText; // 'Bad request' in iOS
});
</script>
</head>
<body>
</body>
</html>