jquery 如何从webmethod返回错误?

rks48beu  于 2023-10-17  发布在  jQuery
关注(0)|答案(5)|浏览(97)

如何在用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()
{

}

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

ggazkfy8

ggazkfy81#

我不知道是否有一个更具体的WebMethod的方法来做这件事,但在ASP.NET中,你通常只是为你的Response object设置状态码。大概是这样的:

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

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

bvhaajcl

bvhaajcl2#

只需在PageMethod中抛出异常并在AjaxFailed中捕获它。就像这样:

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

d8tt03nd3#

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

z18hc3ub

z18hc3ub4#

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);
}
gywdnpxw

gywdnpxw5#

我尝试了所有这些解决方案以及其他StackOverflow答案:

对我来说什么都不管用。
所以我决定自己手动捕获[WebMethod]错误。看我的例子:

[WebMethod]
public static WebMethodResponse GetData(string param1, string param2)
{
    try
    {
        // You business logic to get data.
        var jsonData = myBusinessService.GetData(param1, param2);
        return new WebMethodResponse { Success = jsonData };
    }
    catch (Exception exc)
    {
        if (exc is ValidationException) // Custom validation exception (like 400)
        {
            return new WebMethodResponse
            { 
                Error = "Please verify your form: " + exc.Message
            };
        }
        else // Internal server error (like 500)
        {
            var errRef = MyLogger.LogError(exc, HttpContext.Current);
            return new WebMethodResponse
            {
                Error = "An error occurred. Please contact your administrator. Error ref: " + errRef
            };
        }
    }
}

public class WebMethodResponse
{
    public string Success { get; set; }
    public string Error { get; set; }
}

相关问题