Page_Error未在Javascript的WebMethod调用中显示未处理的异常

时间:2016-11-11 08:46:03

标签: c# asp.net exception-handling webforms

我是C#ASP.net的新手。我在Ubuntu中使用Monodevelop来创建一个简单的WebForm。

Default.aspx.cs:

public partial class Default : System.Web.UI.Page
{
    protected void Page_Error(object sender, EventArgs e)
    {
            Exception Ex = Server.GetLastError();
            Console.WriteLine(Ex.Message);
    }


    [System.Web.Services.WebMethod]
    public static string TestUnhandledException()
    {
        throw new Exception("abc");
    }
}

Default.aspx的

<%@ Page Language="C#" Inherits="MyFirstWebForm.Default" %>
<!DOCTYPE html>
<html>

<head runat="server">
    <title>Default</title>
    <script>
        function Test() {
            PageMethods.TestUnhandledException(OnSuccessCallback, OnFailureCallback);
        }

        function OnSuccessCallback(res) {}
        function OnFailureCallback() {}
    </script>

</head>

<body>
    <form id='form1' runat='server'>
        <asp:scriptmanager enablepagemethods="true" id="scpt" runat="server"> </asp:scriptmanager>
        <asp:button id="Button1" runat="server" text="Initialize" OnClientClick='Test();return false;'/>
    </form>

</body>
</html>

方法TestUnhandledException()工作正常,但在调试时,没有异常消息显示,并且Page_Error()从不运行。

我错过了什么吗?我应该如何在ASP.NET webform中记录未处理的异常?我感谢任何帮助。

更新:Page_Load的异常抛出由Page_Error捕获,但[WebMethod]抛出的异常抛出没有。

2 个答案:

答案 0 :(得分:1)

抓住WebMethod抛出的未处理异常似乎并不简单。 从post

开始
  

你不能只是在Global.aspx.cs文件中添加几行代码   Application_Error事件处理程序方法,用于记录未处理的异常   因为ASP.NET Web服务管道会绕过此事件   可以将所有异常返回给调用者。

所以可能最简单的方法是使用try-catch块来包围方法,如帖子

所示

答案 1 :(得分:0)

您是否检查了内部异常?您的异常消息应该在那里