WebAPI 不会反序列化 JSON,但相同的负载可以在 Swagger 中工作

问题描述 投票:0回答:1

我有一个已使用了 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 页面中,则它不会出现任何问题。

我一整天都在为此苦苦挣扎,但我根本无法解决这个问题,请帮忙!

c# json asp.net-web-api deserialization .net-4.5
1个回答
0
投票

经过一番折腾终于找到了答案。 ASP.NET Web Api - 使用分块传输编码时框架不会将 JSON 转换为对象

到底为什么会发生这种情况,不知道,但至少这是一个修复。

© www.soinside.com 2019 - 2024. All rights reserved.