为什么我不能阻止我的 HttpRequest 从 WPF 客户端分块到 Web API 控制器?

Why can't I prevent chunking on my HttpRequest from WPF client to Web API controller?

我已经和这个问题斗争了一个星期了。有关其他背景信息,请参阅

我的 WPF 客户端对我的 Web API 控制器进行 GETPOSTPUT 调用。几个星期以来一切都很好。然后突然间,我的 PUT 和 POST 调用的 all 以分块方式进入。我找不到任何方法来阻止它。我强烈怀疑我做了一个影响一切的核心变化,但我已经筋疲力尽地试图找到它。我回顾了源代码管理并恢复了旧代码,但它无法正常工作。

我知道 "request.Headers.TransferEncodingChunked" 但它没有效果。我可以在我的客户端中明确地将它设置为 nullfalse,并且它总是以 true

我的 PUT/POST 控制器方法遵循此模型。对我来说,结果是我传入的对象(此处为 "User")作为空值到达。但是,如果我根据请求执行 .ReadAsStringAsync(),我将得到预期的 JSON。但是我不想围绕这种不直观的模式重新设计这个应用程序;被炸毁的物体应该刚刚到达并准备好工作!

[HttpPut]
[ResponseType(typeof(User))]
public IHttpActionResult Put([FromBody] User user)
{
    if (user == null)
        return Content(HttpStatusCode.BadRequest, "User data is null");

    try
    {
        ....etc.
    }
}

"User"对象是Entity Framework对象,平淡无奇。简单的字符串、日期时间和数字属性。

同样,同样令人恼火的是,我可以将 request.Headers.AcceptEncoding 设置为 null,它以 Accept-Encoding: gzip 的形式到达我的控制器,放气.

描述相同问题和症状的一些链接:

对此没有明确的答案,但我终于解决了。这是一个漫长的过程。

不知道它是如何到达那里的,但在我的 .csproj 中我有这个:

<Reference Include="System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
    <HintPath>..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
    <Private>True</Private>
</Reference>

而不是这个:

<Reference Include="System.Net.Http" />  

在我的 App.config 我有这个:

<dependentAssembly>
  <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>

...而不是...不是这个。我不需要这些东西。我刚把它拿出来,它又开始工作了。