使用 DelegatingHandler 包装 WebApi 响应
Wrapping WebApi responses using DelegatingHandler
我正在尝试使用 DelegatingHandler
来包装我的 Web API 响应。我以 this 为例。
在某些时候需要从响应对象中读取内容:
if (response.TryGetContentValue(out content) && ...)
解决方案无效,因为 response.TryGetContentValue(out content)
实际上 return 没有任何内容(或填充 content
变量)。
但是如果我'change'代码...
response.Content.ReadAsAsync<object>().Result;
...它确实有效。
我希望 TryGetContentValue
和 Content.ReadAsAsync
return 具有相同的值。为什么不是这样?
编辑:
如果您查看 HttpResponseMessageExtensions.TryGetContentValue
方法的 the source code,您会看到如下内容:
ObjectContent content = response.Content as ObjectContent;
if (content != null)
{
...
}
value = default(T);
return false;
这意味着此方法假定HttpResponseMessage.Content
属性 将return 是ObjectContent type. However, in your case it is StringContent 的一个实例并且不能转换为ObjectContent
。
我正在尝试使用 DelegatingHandler
来包装我的 Web API 响应。我以 this 为例。
在某些时候需要从响应对象中读取内容:
if (response.TryGetContentValue(out content) && ...)
解决方案无效,因为 response.TryGetContentValue(out content)
实际上 return 没有任何内容(或填充 content
变量)。
但是如果我'change'代码...
response.Content.ReadAsAsync<object>().Result;
...它确实有效。
我希望 TryGetContentValue
和 Content.ReadAsAsync
return 具有相同的值。为什么不是这样?
编辑:
如果您查看 HttpResponseMessageExtensions.TryGetContentValue
方法的 the source code,您会看到如下内容:
ObjectContent content = response.Content as ObjectContent;
if (content != null)
{
...
}
value = default(T);
return false;
这意味着此方法假定HttpResponseMessage.Content
属性 将return 是ObjectContent type. However, in your case it is StringContent 的一个实例并且不能转换为ObjectContent
。