【问题标题】:Show Custom Exception Message显示自定义异常消息
【发布时间】:2012-05-10 20:43:28
【问题描述】:

我试图在保留内部异常的同时显示自定义异常消息。

这是我的示例代码:

public class Class1
{
public Class1()
{
    try
    {
        throw new WebException("Initial Exception");
    }
    catch (WebException we)
    {
        throw new myException("Custom Message", we);
    }
}
}

public class myException : WebException
{
public myException(string msg, WebException e) : base(msg, e) { }
}

当我运行此代码时,它会在调试器中显示自定义消息:

仍然向客户端发送内部异常消息:

我在这里做错了什么?如何在显示我自己的自定义消息时保留内部异常?

【问题讨论】:

  • 请注意,它仍在显示您的自定义 myException 信息。我猜这是 ASP.NET 服务器的一个“功能”,它首先将内部异常数据显示为问题的源头。我想,也许,这是为了方便服务器端调试。可能有一个服务器配置选项来控制它,但我不知道。
  • “您不应定义派生自 ApplicationException 的新异常类;应改用 Exception。此外,您不应编写捕获 ApplicationException 的代码。” - 微软
  • 另外,我认为您可能希望 throw; 而不是 throw e; 作为最终的 Exception catch 处理程序 - 它会保留堆栈信息,而您所拥有的则不会。
  • @JesseC.Slicer,我只是使用此代码作为示例,throw; 没有任何运气,因为我仍然想保留初始异常

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


【解决方案1】:

自定义用户看到的消息的方法是提供自定义错误页面。

http://support.microsoft.com/kb/306355

【讨论】:

    【解决方案2】:

    我怀疑这是因为 ApplicationException 没有得到有效处理,并且 catch 块引发了一个异常,然后该异常被作为基本异常拾取。然后调试器会列出这两个异常。

    我认为这会给出你所追求的行为(我写成控制台应用程序)

    using System;
    
    namespace ConsoleApplication2
    {
        class Program
        {
        static void Main(string[] args)
        {
            myException exception;
            try
            {
                throw new ApplicationException("Initial Exception");
            }
            catch (ApplicationException e)
            {
                exception = new myException("Custom Message", e);
            }
            catch (Exception e)
            {
                throw e;
            }
    
            if (exception != null)
            {
                throw exception;
            }
        }
    }
    }
    
    
    public class myException : ApplicationException
    {
    public myException(string msg, ApplicationException e) : base(msg, e) { }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2011-09-18
      • 2010-09-27
      • 2015-11-04
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多