我有一个已使用了 7 年的 WebAPI(.NET 4.7),自第一个版本以来它一直运行顺利。自 3 月 10 日起,它突然拒绝反序列化发布到它的 JSON 有效负载。
模型看起来像这样:
[XmlType(AnonymousType = true, Namespace = "http://dataprocessor.com/payload")]
public class DataReq
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public string Name { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public string B64Payload { get; set; }
}
控制器看起来像这样:
[HttpPost]
[Route("api/processdata")]
public ResponseObj ProcessReport([FromBody]DataReq payLoad)
{
using (DataProcessing dp = new DataProcessing())
{
ResponseObj response = dp.ProcessData(payLoad);
return response;
}
}
我还设置了一个函数来转储传入的请求正文,然后将其写入文件:
private async Task<string> GetRawPostData()
{
using (var contentStream = await Request.Content.ReadAsStreamAsync())
{
contentStream.Seek(0, SeekOrigin.Begin);
using (var sr = new StreamReader(contentStream))
{
return sr.ReadToEnd();
}
}
}
但是如果我发布有效负载,我会得到类似这样的内容:
{
"name": "Testpayload",
"b64Payload": "SGVsbG8gd29ybGQ="
}
在 VS 中调试它时,我从中得到 null,从外观上看它根本无法反序列化它。正如我所说,过去 7 年是这样,但现在不是了。
但是,如果我将在
GetRawPostData()
中转储的有效负载并将其粘贴到 API 的 Swagger 页面中,则它不会出现任何问题。
我一整天都在为此苦苦挣扎,但我根本无法解决这个问题,请帮忙!
经过一番折腾终于找到了答案。 ASP.NET Web Api - 使用分块传输编码时框架不会将 JSON 转换为对象
到底为什么会发生这种情况,不知道,但至少这是一个修复。