我是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]抛出的异常抛出没有。
答案 0 :(得分:1)
抓住WebMethod抛出的未处理异常似乎并不简单。 从post:
开始你不能只是在Global.aspx.cs文件中添加几行代码 Application_Error事件处理程序方法,用于记录未处理的异常 因为ASP.NET Web服务管道会绕过此事件 可以将所有异常返回给调用者。
所以可能最简单的方法是使用try-catch块来包围方法,如帖子
所示答案 1 :(得分:0)
您是否检查了内部异常?您的异常消息应该在那里