加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 带有transfer-enconding的POST:在IIS 8.5 Web API中

发布时间:2020-12-16 09:43:42 所属栏目:asp.Net 来源:网络整理
导读:我在IIS 8.5上运行ASP.NET Web API,我的POST方法接受json文档的主体.现在,客户端应用程序正在使用apache httpclient,它显然会自动将Transfer-Encoding:chunked标头添加到请求中.我的API方法因为不存在的主体而引发异常 – 它不能反序列化正文中的json,即使
我在IIS 8.5上运行ASP.NET Web API,我的POST方法接受json文档的主体.现在,客户端应用程序正在使用apache httpclient,它显然会自动将Transfer-Encoding:chunked标头添加到请求中.我的API方法因为不存在的主体而引发异常 – 它不能反序列化正文中的json,即使它在客户端日志中看起来很好.

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

有一个类似的问题没有答案:Reading Body on chunked transfer encoded http requests in ASP.NET

解决方法

您必须基本上检查ContentLength标头并将其设置为null(如果它为0).

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读