【问题标题】:C# Exceptioncontext's exception converting to custom exception gives nullC# Exceptioncontext 的异常转换为自定义异常给出 null
【发布时间】:2019-05-20 20:52:17
【问题描述】:

当尝试将 context.Exception 转换为 DomainException 时,我总是得到 null

public class DomainExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        DomainException domainException = context.Exception as DomainException; // context.Exception is not null whereas
        if (domainException != null) // always null
        {
            string json = JsonConvert.SerializeObject(domainException.Message);

            context.Result = new BadRequestObjectResult(json);
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
        }
    }
}

这是我的自定义异常类的样子

public class DomainException : Exception
{
    internal DomainException(string businessMessage)
        : base(businessMessage)
    {
    }
}

我尝试在 DomainException 类中添加一个新结构来获取异常参数,如下所示。

public class DomainException : Exception
{
    internal DomainException(string businessMessage)
        : base(businessMessage)
    {
    }
    public DomainException(Exception ex) : base(ex.Message)
    {

    }
}

转换为我的 customexception(domainException) 时没有错误但得到一个空值?

【问题讨论】:

  • null 表示不是DomainException
  • 我必须修改 DomainException 类以接受我在第三个代码块中提到的异常上下文,我已经在我的类中进行了更改,但它仍然为空。
  • Operator as 实际上并不转换任何东西,它只会尝试转换并在类型不兼容时返回 null。在您的情况下,这意味着 context.Exception 不是 DomainException 的派生词。您需要显式调用构造函数来执行您尝试执行的转换。

标签: c# asp.net-mvc-4 exception-handling asp.net-web-api2


【解决方案1】:

您需要显式转换它,而不是直接通过 'as' 进行转换,因为您的类型 DomainException 与 context.Exception 不匹配。

所以,你可以像下面这样转换它:

DomainException dex = new  DomainException(context.Exception.Message);

此外,您还可以在任何地方使用“dex”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2011-10-06
    相关资源
    最近更新 更多