asp.net - 使用传输编码 : chunked fails in IIS 8. 5 Web API 进行 POST

标签 asp.net iis request transfer-encoding

我在 IIS 8.5 上运行 ASP.NET Web API,并且我的 POST 方法接受 json 文档正文。现在,客户端应用程序正在使用 apache httpclient,它显然会自动将 Transfer-Encoding: chunked header 添加到请求中。我的 API 方法由于主体不存在而引发异常 - 它无法反序列化主体中的 json,即使它在客户端日志中看起来不错。

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

有一个类似的问题未得到解答:Reading Body on chunked transfer encoded http requests in ASP.NET

最佳答案

您必须检查 ContentLength header ,如果为 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

关于asp.net - 使用传输编码 : chunked fails in IIS 8. 5 Web API 进行 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47012360/

相关文章:

windows - 获取应用程序池的标识

javascript - 通过 jQuery ajax 发送大型 JSON 时出现 404、TypeMismatchError 或 "Not enough storage is available to complete this operation"错误

python - 向服务器发送 POST 请求时,“请求”库暂时挂起?! [Python]

java - 选择参数=?但如果?是一个空格,返回该列的任何值

C# - Json POST 请求已发送但未被 PHP 服务器接收

c# - asp.net web 表单中站点地图权限中的用户权限

asp.net - ASP.NET 2.0 的最佳免费富文本框?

ASP.NET 请求在此上下文中不可用

javascript - ASP MVC AJAX 返回对象并在 JavaScript 中作为关联数组进行访问

javascript - angularjs删除index.html