【问题标题】:Receiving json as string always null以字符串形式接收 json 始终为空
【发布时间】:2021-12-23 20:03:12
【问题描述】:

使用这样的端点:

        [HttpPost("[action]")]
        public async Task<ActionResult> Import([FromBody]string request)
        {
            var list = JsonConvert.DeserializeObject<List<RequestQuote>>(request);

            return NoContent();
        }

请求似乎总是为空。今天早些时候它工作了一段时间,但不确定发生了什么变化。

这是我进行呼叫的客户端。

  var json = JsonConvert.SerializeObject(payload);
  var data = new StringContent(json, Encoding.UTF8, "application/json");
  var response = client.PostAsJsonAsync($"{endpoint}/api/v1.0/BatchImport/Import", data);

有效负载是一个列表

即使在使用时

Import([FromBody] List<RequestQuote> request)

我遇到了同样的问题。

【问题讨论】:

  • 什么是payload
  • 连接 Fiddler 之类的东西并检查发送到服务器的 HTTP 请求,如果格式错误,那就是你的问题,如果不是,则使用请求更新问题
  • @MindSwipe,刚用提琴手试过,看起来只有标题。但是当我单步执行代码时,有效负载会按应有的方式填充
  • 您使用的是什么框架+版本? asp.net-core-webapi 还是 asp.net-web-api?可以请edit 你的问题tag 使用适当的框架吗?如果您这样做,您更有可能获得帮助。

标签: c# json .net


【解决方案1】:

代码有个bug,数据被序列化了两次,第二次是用PostAsJsonAsync的时候。试试这个

var json = JsonConvert.SerializeObject(payload);

var data = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync($"{endpoint}/api/v1.0/BatchImport/Import", data);

if (response.IsSuccessStatusCode)
    {
        var stringData = await response.Content.ReadAsStringAsync();
        var result = JsonConvert.DeserializeObject<object>(stringData);
    }

行动应该是

public async Task<ActionResult> Import([FromBody] List<RequestQuote> request)

【讨论】:

    【解决方案2】:

    如果你的控制器有[ApiController]属性,你可以把你要解析的数据类型作为方法的参数。我相信正在发生的事情是您的程序正在尝试将 JSON 解析为字符串类型,这不是您想要的。您可以尝试下面的代码,它应该可以实现您想要的。

    [HttpPost("[action]")]
    public async Task<ActionResult> Import([FromBody]List<RequestQuote> list)
    {
        // The parsed object should now be available here as "list"
        return NoContent();
    }
    

    另外,this post 建议直接拉取请求的正文。任何一种解决方案都应该是有效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      相关资源
      最近更新 更多