是否可以从Exception.Message中仅提取有意义的信息

时间:2013-12-07 11:58:21

标签: asp.net exception

这是我使用Exception.Message时得到的:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---> System.NullReferenceException:对象引用未设置为对象的实例。在WebService.ProcessRequestArc中...... ---内部异常堆栈跟踪结束---

是否可以配置Web应用程序,以便例外仅在我的示例中发送粗体部分?

或者您知道仅提取该部分的方式吗?

2 个答案:

答案 0 :(得分:0)

我一开始并不太了解你的问题。为了避免看到堆栈跟踪,您只需显示Server.GetLastError().Message。在进一步检查时,我发现您的问题是异常被包装到 HttpException 中,而来自 HttpException的消息将方法信息与原始异常消息连接起来。

解决方案

web.config 中,您需要添加自定义错误部分。

<customErrors defaultRedirect="Error.aspx"
    mode="On" redirectMode="ResponseRewrite">

Error.aspx 中,您可以执行以下操作来检查它是否是 HttpException ,如果是,则获取内部异常的消息。

var ex = Server.GetLastError();
string message;
if (ex != null)
{
    message = ((ex is HttpException || ex is SoapException) && ex.InnerException != null) 
        ? ex.InnerException.Message : ex.Message;
}
else
{
    message = "An error has occurred.";
}

Response.Write(message);

在您的页面上,您只想显示 Server.GetLastError()。消息

这是除以零错误之前和之后:

  • 之前:Default.aspx(4):错误CS0020:按常数零划分
  • 之后:尝试除以零。

对于 SoapException 实际上,InnerException属性不是null,那么你需要抛出一个带有实际异常的SoapException。

以下是MSDN中有关customErrors部分和错误处理的一些链接:

答案 1 :(得分:0)

异常的Message属性不遵循任何模式。特别是,Message属性将根据当前文化设置(语言)而有所不同。

但即使您只关心单一语言,也不应该依赖Message属性中的任何内容。它只包含抛出异常的开发人员认为您可能想要查看的内容。

特别是包含您应向用户展示的任何内容!