¿Cómo devolver el error de webmethod?

¿Cómo se devuelve un error en un método de página aspx decorado con WebMethod?

Código de muestra

$.ajax({
    type: "POST",
    url: "./Default.aspx/GetData",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: AjaxSucceeded,
    error: AjaxFailed
});

[WebMethod]
public static string GetData()
{

}

¿Cómo se devuelve un error de un método web? Entonces uno puede usar la porción de error de jquery para mostrar el detalle del error.

preguntado el 27 de agosto de 11 a las 17:08

3 Respuestas

No se si hay mas WebMethod-forma específica de hacerlo, pero en ASP.NET generalmente solo establecería el código de estado para su Objeto de respuesta. Algo como esto:

Response.Clear();
Response.StatusCode = 500; // or whatever code is appropriate
Response.End;

El uso de códigos de error estándar es la forma adecuada de notificar un error a un cliente HTTP consumidor. Antes de finalizar la respuesta también puede Response.Write() cualquier mensaje que desee enviar. Los formatos para esos están mucho menos estandarizados, por lo que puede crear los suyos propios. Pero siempre que el código de estado refleje con precisión la respuesta, su JavaScript o cualquier otro cliente que consuma ese servicio comprenderá el error.

Respondido 27 ago 11, 21:08

Entonces, ¿de dónde viene el Response el objeto viene? El método web del usuario devuelve una cadena. - ΩmegaMan

@OmegaMan: ¿No está en HttpContext.Current en los métodos web como en otro lugar en ASP.NET? - David

Sí, está contenido dentro de esa variable global. WebMethodEs posible que los s no interactúen con eso directamente y sería bueno mencionarlo. - ΩmegaMan

Simplemente lanza la excepción en tu PageMethod y capturala en AjaxFailed. Algo como eso:

function onAjaxFailed(error){
     alert(error);
}

Respondido 27 ago 11, 21:08

Lanzar una excepción hace lo que OP ha pedido, al pasar los detalles de la excepción a la función de error. Sin embargo, cuando se despliega, a menos que customErrors El elemento está configurado en web.config, estos solo aparecen como errores genéricos (al estilo de "Error interno del servidor"), frustrando el propósito de enviar un mensaje útil al cliente y detectarlo en la función de error. - Tyler StandishHombre

Un error se indica mediante el código de estado http (4xx - error de solicitud del usuario, 5xx - error interno del servidor) de la página de resultados. No sé asp.net, pero supongo que tienes que lanzar una excepción o algo así.

Respondido 27 ago 11, 21:08

Pero, ¿esto revelará los detalles de la página, como excepción, al cliente? - Riga

Define en su página de error (o el marco que está utilizando). La mayoría de las veces solo presenta un mensaje de error muy genérico. - ZeissS

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.