Cuando envío una solicitud ajax al servidor, quiero devolver un mensaje individual al cliente en el texto de respuesta en caso de error. En modo de depuración en mi máquina de desarrollo, esto funciona bien. Desafortunadamente, en el modo de producción en el servidor web, siempre recibo un mensaje de error "Solicitud incorrecta", pero ya no aparece el mensaje individual. Estoy desarrollando mi aplicación en ASP.NET MVC 5 y estoy usando jQuery 3.6.0.
Mi solicitud de ajax se ve así:
$.ajax({ type: 'POST', url: 'myURL', data: { val1: clientVal1, val2: clientVal2 }, success: function (res) { //do smthg... }, error: function (response) { alert(response.responseText); } });En el lado del servidor, tomo la llamada ajax así:
[HttpPost] public ActionResult myURL(string val1, string val2) { if(val1.contains(val2)) { } else { Response.StatusCode = 400; Response.Write("My custom error msg."); return new HttpStatusCodeResult(400); } return Json(new { someVal1, otherVal2}, JsonRequestBehavior.AllowGet); }Los httperrors en mi archivo webconfig se ven así:
<httpErrors errorMode="Custom" existingResponse="Replace"> <remove statusCode="404" subStatusCode="-1" /> <remove statusCode="403" subStatusCode="-1" /> <remove statusCode="500" subStatusCode="-1" /> <error statusCode="404" path="/ErrorHandling/http404" responseMode="ExecuteURL" /> <error statusCode="403" path="/ErrorHandling/http403" responseMode="ExecuteURL" /> <error statusCode="500" path="/ErrorHandling/http500" responseMode="ExecuteURL" /> </httpErrors>¿Qué estoy haciendo mal?
He encontrado la solución. Primero tuve que mover la redirección a las páginas de error individuales en web.config al área <system.web>. Ahora mi área system.web se ve así ([...] significa que hay otras configuraciones que no son relevantes para esto):
<system.web> [...] <customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="/ErrorHandling/http500"> <error statusCode="404" redirect="/ErrorHandling/http404" /> <error statusCode="403" redirect="/ErrorHandling/http403" /> <error statusCode="500" redirect="/ErrorHandling/http500" /> </customErrors> [...] </system.web>Después de eso, tuve que cambiar la sección system.webServer como se sugiere en la publicación de freedomn-m y sugerido por Rahul Sharam de la siguiente manera:
<httpErrors errorMode="Custom" existingResponse="PassThrough"> </httpErrors>Ahora todo funciona como debería.