我在 Android 中有一个 http 客户端,将 HTTP PUT 请求发送到使用 C# 和 ASP.NET WebApi 框架实现的 REST api。
只要 JSON 字段与 C# 类中的属性匹配,框架就应该能够神奇地将 JSON 转换(反序列化)为模型类(普通对象)。
当 http 请求带有分块传输编码时,问题就出现了,这使得 Content-Length = 0(根据http://en.wikipedia.org/wiki/Chunked_transfer_encoding)并且框架无法映射 JSON 中的Http请求消息所以参数为空。
看这个简单的例子:
[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请求时记录为空。
据我了解,分块传输编码只是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;}
}