使用DelegatingHandler包装WebApi响应

时间:2016-08-08 08:46:41

标签: c# asp.net-web-api delegatinghandler

我尝试使用DelegatingHandler来包装我的Web API响应。我以this为例。

在某些时候,需要从响应对象中读取内容:

if (response.TryGetContentValue(out content) && ...)

该解决方案无效,因为response.TryGetContentValue(out content)实际上并未返回任何内容(或填充content变量。

但是,如果我改变了'代码......

response.Content.ReadAsAsync<object>().Result;

......确实有效。

我希望TryGetContentValueContent.ReadAsAsync返回相同的值。为什么不是这样?

编辑:

enter image description here

1 个答案:

答案 0 :(得分:2)

如果您查看HttpResponseMessageExtensions.TryGetContentValue方法的the source code,您会看到类似的内容:

ObjectContent content = response.Content as ObjectContent;
if (content != null)
{
     ...
}

value = default(T);
return false;

这意味着此方法假定HttpResponseMessage.Content属性将返回ObjectContent类型的实例。但是,在您的情况下,它是StringContent,无法投放到ObjectContent