我有一个WebApi,它返回一个BadRequest
,内容可以是3种不同类型的异常之一(从Exception
继承)。
客户端必须确定它是哪种异常类型并相应地对其进行处理。目前我正在做:
if (response.StatusCode == HttpStatusCode.BadRequest)
{
var ex = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
}
但是如何获得所需的确切类型?
答案 0 :(得分:0)
我从您的问题中了解到的是,从Api您将获得Http状态代码BadRequest,其结果将包含从Exception类继承的C#Exception。
如果您分析此行
var ex = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
它将从JSON解析为Object类。 但是内容将是从Web api抛出的异常,因此您无法将内容解析为Exception对象。
检查字符串是否包含的更好方法
String res= response.Content.ReadAsStringAsync().Result.toString();
if(res.Contains("Type1Exeption")){
throw new Type1Exception()
}
else if(res.Contains("Type2Exeption")){
throw new Type2Exception()
}
else{
throw new Type3Exception()
}
答案 1 :(得分:0)
我假设您是这样在服务器端进行JSON序列化的
ndk 11
然后您的结果对象将看起来像这样
try {
....
catch (SomeExceptionType ex)
var resultbody = JsonConvert.SerializeObject(ex);
}
由此您可以还原异常
{
"ClassName": "your.namespace.SomeExceptionType",
"Message": "foo bar",
"Data": null,
"InnerException": null,
"HelpURL": null,
"StackTraceString": null,
"RemoteStackTraceString": null,
"RemoteStackIndex": 0,
"ExceptionMethod": null,
"HResult": -2146233088,
"Source": null,
"WatsonBuckets": null
}
编辑
如果异常类型的可能性范围有限,那么您当然也可以这样做
JObject exJson = JsonConvert.DeserializeObject<JObject>(exString);
Type t = Type.GetType(exJson.Value<string>("ClassName"));
var ex = exJson.ToObject(t);