在保留堆栈跟踪的同时更改异常类型

时间:2017-05-09 15:40:57

标签: c# wcf asp.net-web-api exception-handling stack-trace

我有一个与WebApi通信的WCF服务。当我的WCF抛出一个自定义异常时,比如AutoMapperMappingException,当它将异常序列化回WebApi时,我得到一个ReadFault,因为WebApi没有安装Automapper。

现在这是一个普遍存在的问题,可能会出现在任何第三方库中,所以我不想在WebApi上安装第三方库。

有没有办法可以在保留堆栈跟踪的同时更改异常的类型。

我想做这样的事情(每个例外都需要它自己的自定义实现,但没关系):

public void ThrowKnownException(AutoMapperMappingException ex)
{
    var message = FormatMessage(ex);

    var knownException = new Exception(message);
    knownExcpetion.StackTrace = ex.StackTrace;

    throw knownException;
}

这不起作用,因为您无法分配StackTrace。有谁知道干净的方法吗?

修改 添加内部异常将不起作用,因为WCF仍然需要将内部异常序列化为webapi,这将导致读取错误

1 个答案:

答案 0 :(得分:0)

您可以使用重载的构造函数将异常包装为InnerException

Exception Overload