【发布时间】:2017-05-01 14:40:10
【问题描述】:
我的代码处理一些其他 API(GET 方法)。此 GET 方法返回如下响应:
{"error":0,"Logs":[{"LoggerIdx":"91","OfficeID":"MIA1A0955","Agent":"581A78AD"}]}
如果查询没有找到任何内容,则返回:
{"error":0,"Logs":[{"No values found"}]}
我正在使用调用此 API 来检索值并显示报告的代码是:
private string uri = "http://localhost";
public async Task<List<T>> GetWSObjects<T>(string uriActionString)
{
return new List<T> { await this.GetWSObject<T>(uriActionString) };
}
public async Task<T> GetWSObject<T>(string uriActionString)
{
T returnValue =
default(T);
try
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(uri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(uriActionString);
response.EnsureSuccessStatusCode();
returnValue = JsonConvert.DeserializeObject<T>(((HttpResponseMessage)response).Content.ReadAsStringAsync().Result);
}
return returnValue;
}
catch (Exception e)
{
throw (e);
}
}
returnValue 尝试用响应中的值填充我的模型。但是,当响应仅包含“未找到值”时,它会中断(显然)。我的问题是,我应该在这个 try-catch 中放置一个 try-catch 来处理这种行为吗?问题是向用户显示了整个异常,而不仅仅是“未找到值”。建议?我的模型是:
public class BuildingReportModel
{
public string message1 { get; set; }
public Log[] Logs { get; set; }
}
public class Log
{
public string ProdLoggerIdx { get; set; }
public string OfficeID { get; set; }
public string Agent { get; set; }
}
【问题讨论】:
-
您只是重新抛出错误。你甚至可以一起摆脱外部的 try catch
-
@Steve 我想了想,但是要捕捉其他真正的错误,比如错误的输入,sql 呢?
-
你应该看看这个answer。
-
Try catch 内的 try catch 让我在嘴里吐了一点点。我工作的人把它们放在 finally 块中,所以情况可能会更糟......