我的WebApi抛出了一个内部服务器异常,在客户端我尝试在异常中反序列化结果。
控制器的操作确实:
try
{
//Do something...
}
catch (Exception ex)
{
return InternalServerError(ex);
}
在客户端我正在做:
var content = response.Content.ReadAsStringAsync().Result;
var exception = JsonConvert.DeserializeObject<Exception>(content);
但抛出异常:
会员&#39; ClassName&#39;没找到。
使用Json2csharp检查上下文,我得到以下对象:
public class InnerException
{
public string Message { get; set; }
public string ExceptionMessage { get; set; }
public string ExceptionType { get; set; }
public string StackTrace { get; set; }
}
public class RootObject
{
public string Message { get; set; }
public string ExceptionMessage { get; set; }
public string ExceptionType { get; set; }
public string StackTrace { get; set; }
public InnerException InnerException { get; set; }
}
那么ClassName
来自何处,反序列化异常的最佳方法是什么?
修改
为了序列化异常,我创建了一个派生自Exception
的新类,并添加了以下代码:
protected RequestException(SerializationInfo info, StreamingContext context)
{
}
[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
}
但是,原始异常细节,特别是内部异常,将丢失。
答案 0 :(得分:1)
不要暴露异常本身,使用内部属性创建自己的响应对象,如果异常填充您自己的对象并将其传递给响应。在客户端使用
var content = response.Content.ReadAsStringAsync().Result;
var response = JsonConvert.DeserializeObject<MyResponseObject>(content);