我正在使用HttpClient创建一个“SDK / Proxy”类,并且希望将SDK正在使用的服务抛出的异常传递给使用此SDK的应用程序。原始异常需要保持不变且不包装。我已经尝试过EnsureSuccessStatusCode(),但这并不好,因为消费者会丢失原始异常。 下面是试图从基本服务捕获异常并将其传递给消费者的SDK代码;
public async Task<string> GetValue(string effect)
{
using (var client = GetHttpClient())
{
HttpResponseMessage resp = await client.GetAsync("api/values?effect=" + effect).ConfigureAwait(false);
if (resp.IsSuccessStatusCode)
{
return await resp.Content.ReadAsStringAsync();
}
throw await resp.Content.ReadAsAsync<Exception>();
}
}
“消费者”服务正在使用SDK;
public async Task<string> Get(string effect)
{
return await baseSvc.GetValue(effect);
}
测试时,我收到以下回复;
{ 消息:“发生了错误。” ExceptionMessage:“找不到”成员'ClassName'。“ ExceptionType:“System.Runtime.Serialization.SerializationException”...
抛出异常的基本服务代码就是这个;
public async Task<string> Get(string effect)
{
switch (effect.ToLower())
{
case "string":
return "this is a string";
case "exception":
throw new ApplicationException("this is an application exception.");
default:
return "effect requested does not exist.";
}
}
是否可以通过SDK将消费者服务中的原始未更改的异常“流”到消费者身上?
答案 0 :(得分:2)
您可以使用以下内容。 string responseBody = response.Content.ReadAsStringAync()。Result; 抛出新的HttpException((int)response.StatusCode,responseBody);
我已经提到了这个 - web API and MVC exception handling