郭某人的网站

关于 / 留言

ASP.NET 页面抛出 HttpException 类型异常时无法直接获取 Message 参数值

Web 窗体 aspx 页面抛出的 HttpException 异常到了 InnerException 里面


我在做 ASP.NET 网站的异常捕获程序时发现了一个坑:从 .aspx 页面里抛出的 HttpException 类型异常无法直接获取到其开发者自定义的 Message 参数值

假如站点中有个 .aspx 页面,我们使其在页面载入时抛出一个 HttpException 异常并自定义一串错误消息:

protected void Page_Load(object sender, EventArgs e)
{
    throw new HttpException(500, "自定义错误消息");
}

然后在 Global.asax 处理程序的异常事件中获取此异常:

protected void Application_Error(object sender, EventArgs e)
{
    Exception last_error = Server.GetLastError();
}

你会发现 last_error 异常的 Message 参数值不符合预期,你自定义的错误消息跑到了 InnerException 里面,如下调试图:

这个问题费了我一些时间,因为我发现在网站项目的 URL 路由程序中用的是同样的代码,但是全局处理程序的异常事件是能够对此进行正常操作的,而不是出现在了 InnerException 里面,所以我猜测 ASP.NET 框架或者是其它方面对 .aspx 页面的异常处理做出了额外的封装修改。

相关环境:.NET Framework 4.8


最后更新时间:2025/06/02 18:50

如果您喜欢此文章,或此文章给您带来了任何帮助,请考虑对我进行资金赞赏,您的支持将会成为我坚持的力量。

注意!你的赞赏转账请考虑再三后支付,此收款不作任何形式的退款。