peticiones net mvc desde asp jquery asp.net-mvc ajax

desde - ¿Cómo desencadena la devolución de llamada de "error" en una llamada jQuery AJAX utilizando ASP.NET MVC?



peticiones ajax desde asp.net mvc (6)

Creo que ese evento se plantea para cualquier respuesta que tenga un código de respuesta distinto a 200. Sin embargo, no puedo encontrar pruebas de esto en los documentos.

Para hacer esto desde el código (funciona en Webforms):

throw new HttpException(500, "Error message");

Esto está relacionado con mi pregunta sobre cómo manejar los errores de las llamadas jQuery AJAX . Varias respuestas sugirieron que use la devolución de llamada de "error" para mostrar los errores de una llamada jQuery AJAX. Me preguntaba cómo hacer eso usando ASP.NET MVC. ¿Hay alguna manera para que mi acción de controlador devuelva un error que sería accesible desde la devolución de llamada de "error"? El código del lado del cliente se vería así:

$.ajax({ type: "POST", url: "MyUrl", data: "val1=test", success: function(result){ // Do stuff }, error: function(request,status,errorThrown) { } });


De acuerdo con esta página, solo necesita aplicar el encabezado HTTP/1.0 500 Internal Server Error en su página ASP.net. La solicitud $.ajax capturará ese error y ejecutará la función de devolución de llamada de error . =]


Si estás usando

[HandleError]

luego lanzar una HttpException será atrapada y enrutada a su página de error personalizada.

Otra opción es usar

Response.StatusCode = 500; Response.Write("Error Message"); Response.End();

Probablemente haya una manera más conveniente de escribir esto, pero aún no me he topado con eso.


Si está utilizando MVC 3, puede devolver un ActionResult en su controlador que tenga el código de estado HTTP y el mensaje de estado juntos:

return new HttpStatusCodeResult(500, "Error message");

Luego, en su devolución de llamada por error:

error: function (request, textStatus, errorThrown) { alert(request.statusText); }


Te envío una propuesta; trabaja con excepciones constreñidas e incontroladas.

public class CodeExceptionToHttpFilter : FilterAttribute, IExceptionFilter { public CodeExceptionToHttpFilter() { Order = 2; } public void OnException(ExceptionContext filterContext) { var codeException = filterContext.Exception as CodeException; var response = filterContext.RequestContext.HttpContext.Response; response.StatusCode = (codeException == null)? 550: 551; response.ContentType = MediaTypeNames.Text.Plain; response.Charset = "utf-8"; response.Write(filter.Exception.Message); filterContext.ExceptionHandled = true; response.TrySkipIisCustomErrors = true; }

}

Más información en mi blog. http://rodrigopb.wordpress.com/2012/11/28/gestion-de-errores-en-peticiones-ajax-a-mvc/


NOTA: Oye, esto fue publicado antes de que ASP.Net MVC llegara a 1.0, y ni siquiera he mirado el framework desde entonces. Probablemente deberías dejar de votar esto.

Haz algo como esto:

Response.StatusCode = (int)HttpStatusCode.BadRequest; actionResult = this.Content("Error message here");

El código de estado debería cambiar según la naturaleza del error; generalmente, 4xx para problemas generados por el usuario y 5xx para problemas del lado del servidor.