tengo un poco de jQuery que tiene este aspecto:¿Cómo puedo configurar el contentType de una publicación jQuery ajax para que ASP.NET MVC pueda leerla?
$.ajax({
type: "POST",
url: "/Customer/CancelSubscription/<%= Model.Customer.Id %>",
contentType: "application/json",
success: refreshTransactions,
error: function(xhr, ajaxOptions, thrownError) {
alert("Failed to cancel subscription! Message:" + xhr.statusText);
}
});
Si la acción que se llama provoca una excepción que en última instancia son recogidas por el Global.asax Application_Error donde tengo algo de código como esto:
var ex = Server.GetLastError();
if (Request.ContentType.Contains("application/json"))
{
Response.StatusCode = 500;
Response.StatusDescription = ex.Message;
Response.TrySkipIisCustomErrors = true;
}
else
{
// some other way of handling errors ...
}
Cuando ejecuto el script que realiza la publicación, Request.ContentType siempre es una cadena vacía y, por lo tanto, no da en el primer bloque si. ¿Hay algún otro valor que debería poner en el ajax "contentType"? ¿O hay otra forma de decirle a asp.net que el tipo de contenido debe ser "application/json"?
Aclaración
El objetivo que estoy tratando de lograr es hacer pasar el mensaje de excepción posterior al evento error de Ajax. Actualmente, aunque el bloque IF se está pasando por alto, el evento de error arroja correctamente un cuadro de alerta pero el mensaje es "No encontrado".
Como puede ver, estoy tratando de establecer el mensaje de excepción en Response.StatusDescription, que creo que el xhr.statusText en el error ajax está establecido en.
Esto cambió en jQuery 1.4, ahora se envía siempre el tipo de contenido ... nota importante :) http://api.jquery.com/jQuery.ajax/ –
He probado este método y que hace el trabajo. Estamos utilizando jQuery 1.3.2 aquí. Por lo que Nick describe, parece que mi código en la pregunta debería funcionar con 1.4. –
Esta es la respuesta correcta. La modificación de la configuración del tipo de contenido del objeto XHR en beforeSend no funciona bien en algunos navegadores, y el servicio devolverá XML en lugar de JSON. –