¿Qué tan confiable es HttpStatusCodeResult.StatusDescription?

Considere la siguiente acción del controller, de la cual existen muchos ejemplos en la networking:

public ActionResult Fail() { return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "My helpful message"); } 

Ahora, llamaremos a esa acción a través de Ajax y mostraremos los resultados en la página;

 <!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> 

Cuando abro esa página, por ejemplo, Chrome o Firefox en mi dispositivo con Windows 10, obtengo un informe de error completo con Mi post útil desplegado de forma destacada.

Sin embargo, cuando abro esta página en un dispositivo iOS (probado con iPad Air, iPhone 5S), el post no aparece en ninguna parte de la respuesta recibida.

Esto me lleva a creer que no se puede confiar en HttpStatusCodeResult.StatusDescription para que se devuelva al cliente y, en lugar de detectar un problema de aplicación y responder con un new HttpStatusCodeResult() , en su lugar, los models que se envían de vuelta a la interfaz deben extenderse a include cualquier post de error específico de la aplicación y enviarlo normalmente ( HttpStatusCode.OK ). Este es el caso

Tenga en count que esto se extiende a AngularJs donde originalmente lo encontré, y jQuery también;

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> 

Puede confiar en el resultado del código de estado que se devolverá del server (al less en IIS).

Sin embargo, no hay garantías de que el browser tenga soporte para ello.

Pero tiene razón en su afirmación de que debe usar el model para devolver cualquier error que se muestre en el cliente para get resultados consistentes.