ibe*_*dev 8 c# json http-content-length chunked-encoding asp.net-web-api
我在Android中有一个http客户端将HTTP PUT请求发送到使用C#和ASP.NET WebApi框架实现的REST API.
只要JSON字段与C#类中的属性匹配,框架就应该能够将JSON神奇地转换(反序列化)到模型类(普通对象)中.
问题是当该HTTP请求来与块传输编码,使内容长度= 0(根据http://en.wikipedia.org/wiki/Chunked_transfer_encoding)和框架是不是能够映射内是这样的JSON Http请求消息,因此参数为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;
}
Run Code Online (Sandbox Code Playgroud)
问题是当客户端发送嵌入的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;}
}
Run Code Online (Sandbox Code Playgroud)
我最近偶然发现了同样的问题,并设法为它创建了一个解决方法.我使用了原始的JsonMediaTypeFormatter类,将其子类化并更新了ReadFromStreamAsync/ReadFromStream方法的实现.
https://gist.github.com/cobysy/578302d0f4f5b895f459
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
1446 次 |
| 最近记录: |