繁体   English   中英

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

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

我已经为此战斗了一个星期。 有关其他背景知识,请参见我之前的问题

我的WPF客户端对我的Web API控制器进行GETPOSTPUT调用。 几周来一切都很好。 然后突然,我所有的PUT和POST调用都被分块了。 我找不到任何防止它的方法。 我强烈怀疑我所做的一项重大更改会影响到所有方面,但是我很努力地试图找到它。 我回顾了源代码管理并恢复了旧代码,但它拒绝工作。

我知道“ request.Headers.TransferEncodingChunked”,它没有任何作用。 我可以在客户端中将其显式设置为nullfalse ,并且它始终以true的形式到达下面的例程中。

我的PUT / POST控制器方法遵循此模型。 对我来说,结果是我的传入对象(此处为“ User”)为null。 但是,如果我对请求执行.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.
    }
}

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

同样,令人生气的是,我可以将request.Headers.AcceptEncoding设置为null,并将其作为我的Accept-Encoding到达我的控制器:gzip,deflate

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

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

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

...而不是... 不是这个。 我不需要这个东西。 我刚拿出它,一切又重新开始了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM