将json作为字符串接收,始终为空

ddarikpa  于 2023-02-26  发布在  其他
关注(0)|答案(3)|浏览(274)

使用如下所示的端点:

[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)

我也有同样的问题。

kuuvgm7e

kuuvgm7e1#

代码中有一个错误,数据被序列化了两次,第二次是在使用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)
jc3wubiy

jc3wubiy2#

如果你的控制器有[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建议直接提取请求的主体,这两种解决方案都应该有效。

k3bvogb1

k3bvogb13#

json对我来说是正确的。但是在staticContent之后,我认为它崩溃了。我发送到Service的模型是null。下面是我的项目代码:How can I send Model to service in xamarin forms. Something wrong while posting?

相关问题