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

c# – ASP.NET Web Api – 使用Chunked Transfer Encoding时,框

发布时间:2020-12-15 07:48:14 所属栏目:百科 来源:网络整理
导读:我在 Android中有一个http客户端将HTTP PUT请求发送到使用C#和ASP.NET WebApi框架实现的REST api. 只要JSON字段与C#类中的属性匹配,框架就应该能够将JSON神奇地转换(反序列化)到模型类(普通对象)中. 当http请求附带Chunked Transfer Encoding使Content-Lengt
我在 Android中有一个http客户端将HTTP PUT请求发送到使用C#和ASP.NET WebApi框架实现的REST api.

只要JSON字段与C#类中的属性匹配,框架就应该能够将JSON神奇地转换(反序列化)到模型类(普通对象)中.

当http请求附带Chunked Transfer Encoding使Content-Length = 0(根据http://en.wikipedia.org/wiki/Chunked_transfer_encoding)并且框架无法映射Http请求消息中的JSON以使参数为null时,就会出现问题.

看这个简单的例子:

[HttpPut]
    public HttpStatusCode SendData(int id,int count,[FromBody]MyData records,HttpRequestMessage requestMessage)
    {
        var content = requestMessage.Content;
        string jsonContent = content.ReadAsStringAsync().Result; //this gets proper JSON
        return HttpStatusCode.OK;
    }

问题是当客户端发送嵌入的http请求时,记录为空.

据我所知,Chunked Transfer编码只是一个传输属性,http客户端或服务器不应该担心应用层(传输层的业务).但似乎框架并没有像我想的那样管理它.

我可以从HttpRequestMessage手动检索JSON并将其反序列化为MyData对象,但我无法利用ASP.NET框架的魔力.而且您知道规则:您添加的代码越多,您可能会引入的错误就越多.

有没有办法处理带有JSON的Http Put请求,这些请求来自ASP.NET Web Api 2中的分块传输?

编辑:这是此示例的模型类,框架应在反序列化JSON时实例化

public class MyData
{
    public string NamePerson {get; set;}
    public int Age {get; set;}
    public string Color {get; set;}
}

解决方法

我最近偶然发现了同样的问题,并设法为它创建了一个解决方法.我使用了原始的JsonMediaTypeFormatter类,将其子类化并更新了ReadFromStreamAsync / ReadFromStream方法的实现.

https://gist.github.com/cobysy/578302d0f4f5b895f459

希望这可以帮助.

(编辑:李大同)

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

    推荐文章
      热点阅读