Asp.net 如何捕获webmethod中抛出的每个异常,但这些异常不会中断程序的执行

Asp.net 如何捕获webmethod中抛出的每个异常,但这些异常不会中断程序的执行,asp.net,jquery,exception-handling,Asp.net,Jquery,Exception Handling,有没有办法让webmethod中抛出的每个异常直接进入jQueryAjax错误回调函数 $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "MantenimientoNotasCapacidades.aspx/SaveViaWebService", data: JSON.stringify(params),

有没有办法让webmethod中抛出的每个异常直接进入jQueryAjax错误回调函数

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "MantenimientoNotasCapacidades.aspx/SaveViaWebService",
        data: JSON.stringify(params),
        dataType: "json",
        async: true,
        success: function (data) {               


        },
        error: function (request, status, error) {
            var response = JSON.parse(request.responseText).d;
            var error = JSON.parse(response);
            alert(JSON.parse(request.responseText).error.message);

        }
    });
我知道使用JSON.parse(request.responseText).Message应该足以显示该错误的信息,但我现在得到的只是每次引发异常时,代码都会停在那里,需要继续按F10或F5才能最终看到警报

我已经尝试过将代码封装在“try”块中,但我认为这样做没有多大意义,因为我不能像在visual basic应用程序中那样在“catch”块中做很多事情,在该应用程序中,我可以使用“catch”块在MsgBox中显示异常消息

有没有办法在错误回调函数中捕获webmethod中抛出的所有异常,但不停止代码的执行

任何帮助都将不胜感激


祝你新年快乐

根据@cmd.promt的建议,我将Response.StatusCode更改为500,并创建了一个包含抛出异常描述的对象(myError),然后剩下的唯一一件事就是序列化该对象并将其发送回客户端(这里我尝试使用Response..Write(“{”消息“:”操作失败!”))但由于某种原因,我最终总是得到相同的错误:“JSON.parse:JSON数据后出现意外的非空白字符”,因此最后我决定使用并忘记所有关于响应的内容。编写


到目前为止,一切都如我所愿,除了继续中断程序执行的异常这是他们的正常行为吗??它们不是都应该直接转到“catch”块吗?

根据@cmd.promt的建议,我将Response.StatusCode更改为500,并创建了一个包含抛出异常描述的对象(myError),然后,唯一要做的就是序列化对象并将其发送回客户端(这里我尝试使用Response..Write(“{”“message”“:”“action failed!”“}”),但由于某些原因,我总是得到相同的错误:“JSON.parse:JSON数据后出现意外的非空白字符”因此,最后我决定接受并忘记所有关于响应的事情。写下

<WebMethod()> _
        Public Shared Function SaveViaWebService(lst As List(Of Students)) As String
          Try

          Catch ex As Exception


                Dim httpResponse = HttpContext.Current.Response
                httpResponse.Clear()
                httpResponse.StatusCode = 500

                'I thought that .StatusDescription would be useful but it turned out it didn't
                'httpResponse.StatusDescription = ex.Message

                Dim myError= New With {.message = ex.Message, .source = ex.Source}
                Return JsonConvert.SerializeObject(myError)

            End Try
        End Function

到目前为止,一切都如我所愿,除了继续中断程序执行的异常这是他们的正常行为吗??他们不是都应该直接进入“catch”块吗?

为什么
try
块不起作用?不可能在
catch
块中构建返回json,返回500,并在
error
函数中处理它吗?如果您已经尝试过这个方法,但它不起作用,那么您可能忘记更改响应代码——在这种情况下,响应代码将为200,并且您的错误json实际上被发送到您的成功回调。@cmd.prompt感谢您的评论,我终于能够将错误发送到错误回调。现在我只剩下一个问题了。请看一下我添加到问题中的答案为什么
try
块不起作用?不可能在
catch
块中构建返回json,返回500,并在
error
函数中处理它吗?如果您已经尝试过这个方法,但它不起作用,那么您可能忘记更改响应代码——在这种情况下,响应代码将为200,并且您的错误json实际上被发送到您的成功回调。@cmd.prompt感谢您的评论,我终于能够将错误发送到错误回调。现在我只剩下一个问题了。请看一下我添加到问题中的答案
<WebMethod()> _
        Public Shared Function SaveViaWebService(lst As List(Of Students)) As String
          Try

          Catch ex As Exception


                Dim httpResponse = HttpContext.Current.Response
                httpResponse.Clear()
                httpResponse.StatusCode = 500

                'I thought that .StatusDescription would be useful but it turned out it didn't
                'httpResponse.StatusDescription = ex.Message

                Dim myError= New With {.message = ex.Message, .source = ex.Source}
                Return JsonConvert.SerializeObject(myError)

            End Try
        End Function