【问题标题】:How to return error from webmethod?如何从 webmethod 返回错误?
【发布时间】:2011-11-05 04:23:22
【问题描述】:

WebMethod装饰的aspx页面方法如何返回错误?

示例代码

$.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()
{

}

如何从网络方法返回错误?因此可以使用 jquery 错误部分来显示错误详细信息。

【问题讨论】:

    标签: jquery asp.net webmethod


    【解决方案1】:

    我不知道是否有更具体的WebMethod 方式来执行此操作,但在 ASP.NET 中,您通常只需为您的Response object 设置状态代码。像这样的:

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

    使用标准错误代码是向使用 HTTP 客户端通知错误的适当方式。在结束回复之前,您还可以Response.Write() 任何您想发送的消息。这些格式的标准化程度要低得多,因此您可以创建自己的格式。但只要状态码准确地反映了响应,那么您的 JavaScript 或使用该服务的任何其他客户端都会理解该错误。

    【讨论】:

    • 那么Response 对象从何而来?用户的 webmethod 正在返回一个字符串。
    • @OmegaMan:它不是在 Web 方法中的 HttpContext.Current 中吗,因为它在 ASP.NET 的其他地方?
    • 是的,它包含在该全局变量中。 WebMethods 可能不会直接与之交互,最好提一下。
    【解决方案2】:

    只需在 PageMethod 中抛出异常并在 AjaxFailed 中捕获它。类似的东西:

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

    【讨论】:

    • 通过将异常详细信息传递给错误函数,抛出异常可以满足 OP 的要求。但是,在部署时,除非在 web.config 中设置了 customErrors 元素,否则这些只会显示为一般错误(à la“内部服务器错误”),违背了向客户端发送有用消息并将其捕获的目的误差函数。
    【解决方案3】:

    结果页面的 http 状态码(4xx - 用户请求故障,5xx - 内部服务器故障)指示错误。我不知道asp.net,但我猜你必须抛出异常或类似的东西。

    【讨论】:

    • 但这会向客户披露页面详细信息吗?
    • 在您的错误页面(或您正在使用的框架)上定义。大多数情况下,您只是提供一个非常笼统的错误消息。
    【解决方案4】:

    JQuery xhr 将在 responseText/responseJSON 属性中返回错误和堆栈跟踪。

    例如: C#:

    throw new Exception("Error message");
    

    Javascript:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多