使用 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;

...它确实有效。

我希望 TryGetContentValueContent.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