2015-08-30 2 views
4

Рассмотрим следующие действия контроллера, из которых существует немало примеров вокруг сети:Насколько надежным является 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> 

ответ

1

Вы можете полагаться на результат кода состояния должны быть возвращены с сервера (по крайней мере, на IIS).

Однако, у гарантии есть браузер.

Но вы правы в своем утверждении, что вы должны использовать модель, чтобы возвращать любые ошибки для отображения на клиенте, чтобы получить согласованные результаты.

Смежные вопросы