0

我已经为此奋斗了一个星期。有关其他背景信息,请参阅我之前的问题。

我的WPF客户对我的 Web API 控制器进行GETPOST调用PUT。几周来一切都很好。然后突然之间,我所有的 PUT 和 POST 调用都分块进入。我找不到任何阻止它的方法。我强烈怀疑我做了一个影响一切的核心更改,但我已经筋疲力尽地试图找到它。我回顾了源代码控制并恢复了旧代码,但它只是拒绝工作。

我知道“request.Headers.TransferEncodingChunked”,它没有效果。我可以在我的客户端中明确地将其设置为nullfalse,并且它总是以true的形式出现在我的下面的例程中。

我的 PUT/POST 控制器方法遵循此模型。对我来说,结果是我的传入对象(此处为“用户”)作为空值到达。但是,如果我.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.
    }
}

“用户”对象是一个实体框架对象,并且不起眼。简单的字符串、日期时间和数字属性。

同样,同样令人愤怒的是,我可以将 request.Headers.AcceptEncoding 设置为null并且它以Accept-Encoding: gzip, deflate 的形式到达我的控制器。

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

4

1 回答 1

0

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

不知道它是如何到达那里的,但在我的 .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>

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

于 2017-02-21T03:59:51.230 回答