【问题标题】:catch Exception through inheritance in C# [closed]通过 C# 中的继承捕获异常 [关闭]
【发布时间】:2019-11-28 10:36:28
【问题描述】:

我在我的 asp.net 项目中创建了一个 ApplicationException。我的想法是,我使用这个 ApplicationExcpetion 向用户抛出带有适当消息的异常,并使用 Exception 向用户发送一般消息来处理一般和意外错误。

public async Task<HttpResponseMessage> Get([FromUri]GetDto getDto)
{
    try
    {
        var response = await _application.Get(getDto);
        return Request.CreateResponse(HttpStatusCode.OK, response);
    }
    catch (ApplicationException ex)
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message);
    }
    catch (Exception)
    {
        return Request.CreateResponse(HttpStatusCode.InternalServerError,
            "There was an error on the request.");
    }
}

问题是我创建了一个派生自 ApplicationException 的 CustomException 类,当它被抛出时,它总是停在 Exception 捕获上,而不是我所期望的 ApplicationException 捕获。

public class ApplicationException : Exception
{
    public ApplicationException(string message) : base(message)
    {
    }

    public ApplicationException(string message, Exception innerException)
        : base(message, innerException)
    {
    }
}
public class CustomException: ApplicationException
{
    private static readonly string MESSAGE = "customMessage";
    public CustomException(): base(MESSAGE) { } 
}

我做错了什么吗?将海关申请例外与其他例外分开处理这样的例外的正确方法是什么?

【问题讨论】:

  • 这里明显错误的一件事是您捕获了一个Exception 实例并记录了关于它的nothing。无论您返回给客户什么,您至少应该记录详细信息以供内部使用。例如,这还可以让您查看异常的实际类型,这样您就可以验证它是否真的是 CustomException 您正在到达这里(我怀疑它不是)。
  • 是的,但是由于我是在异常捕获之前捕获ApplicationExceptions,所以错误应该属于ApplicationException捕获,对吧?
  • ApplicationException 不是你自己写的,是吗?有System.ApplicationException...
  • 我无法重现此内容。就像你说的那样,catch(SomeException) 捕获了源自SomeException 的所有异常类型。所以看起来 Fildor 是对的,你不是在抓 your ApplicationException,而是 System.ApplicationException。 (或者那个错误已经发生在继承中)。
  • 正确,正如我在回答中所写,问题是已经存在 System.ApplicationException。我认为的另一个解决方案是删除我的 ApplicationException 类并使 de CustomException 派生自这个已经存在的 System.ApplicationException

标签: c# .net exception


【解决方案1】:

我才意识到我做错了什么。

c# 库中已经存在一个 ApplicationExcpetion 类。我的 Controller 上的 ApplicationException 捕获正在寻找 System.ApplicationException 类型的异常,但我创建的 ApplicationException 类除外。

我的解决方案是简单地将 ApplicationException 重命名为 DomainException,并且效果很好:)

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多