带有传输条件的POST:IIS 8.5 web API中的分块失败



我在IIS 8.5上运行了ASP.NET Web API,我的POST方法接收了一个json文档体。现在,一个客户端应用程序正在使用apachehttpclient,它显然会自动将Transfer Encoding:chunked标头添加到请求中。我的API方法由于不存在body而抛出异常-它无法反序列化body中的json,即使它在客户端日志中看起来很好。

我应该如何处理请求以确保我得到整个身体?我想IIS也应该支持对请求的传输编码,因为它是HTTP/1.1规范的一部分,对吧?

还有一个类似的问题没有得到回答:ASP.NET 中分块传输编码http请求的Reading Body

您基本上必须检查ContentLength标头,如果它为0,则将其设置为null。

public class ChunkJsonMediaTypeFormatter : JsonMediaTypeFormatter
{
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
{
content.Headers.ContentLength = (content.Headers.ContentLength == 0) ? null : content.Headers.ContentLength;
return base.ReadFromStreamAsync(type, readStream, content, formatterLogger);
}
}

连接这个格式化程序

GlobalConfiguration.Configure(config =>
{
var jsonFormatter = new ChunkJsonMediaTypeFormatter() { SerializerSettings = config.Formatters.JsonFormatter.SerializerSettings };
config.Formatters.Remove(config.Formatters.JsonFormatter);
config.Formatters.Insert(0, jsonFormatter);
}

https://gist.github.com/jayoungers/0b39b66c49bf974ba73d83943c4b218b

最新更新