当前位置:  开发笔记 > 编程语言 > 正文

为什么复杂的字符串(字符串化的json数据)不被接受为Web API方法的POST参数,但是一个简单的字符串是什么?

如何解决《为什么复杂的字符串(字符串化的json数据)不被接受为WebAPI方法的POST参数,但是一个简单的字符串是什么?》经验,为你挑选了1个好方法。

我想将一堆数据,转换为json,作为字符串,发送到Web API POST方法.我可以发送一个简单的字符串,但是当我尝试发送字符串化的json数据时,甚至没有达到该方法 - 显然复杂的字符串不被视为有效的字符串值或其他东西.

当从客户端传递"randomString"时,这是有效的:

Web API

[Route("{unit}/{begindate}/{enddate}/{stringifiedjsondata}")]
[HttpPost]
public void Post(string unit, string begindate, string enddate, string stringifiedjsondata)
{
    // test
    string jsonizedData = stringifiedjsondata;

的WinForms

string dataAsJson = "randomString";
String uriToCall = String.Format("/api/produceusage/{0}/{1}/{2}/{3}", _unit, beginRange, endRange, dataAsJson);
HttpResponseMessage response = await client.PostAsync(uriToCall, null);

当字符串是json数据时,例如:

[
  {
    "ItemDescription": "DUCKBILLS, GRAMPS-EIER 70CT  42#",
    "PackagesMonth1": 1467, . . . }]

...这是行不通的.我通过使用JSON.NET将通用列表转换为json来创建此字符串,如下所示:

string dataAsJson = JsonConvert.SerializeObject(_rawAndCalcdDataAmalgamatedList, Formatting.Indented);
String uriToCall = String.Format("/api/produceusage/{0}/{1}/{2}/{3}", _unit, beginRange, endRange, dataAsJson);
HttpResponseMessage response = await client.PostAsync(uriToCall, null);

所以唯一的区别在于字符串; 当它像"randomString"这样简单时我在Web API POST方法中到达这一行:

string jsonizedData = stringifiedjsondata;

...但是当它是一个复杂的字符串时,例如字符串化的json数据,则不会到达该行.

为什么?我如何修复字符串化的json数据,以便接收和识别它?



1> Hernan Guzma..:

您遇到了麻烦,因为您通过URL将JSON发送到您的API.我建议您将其发送到您的请求的正文内容中.为此,请更改您的Web Api方法,如下所示:

[Route("{unit}/{begindate}/{enddate}")]
[HttpPost]
public void Post(string unit, string begindate, string enddate, [FromBody] string stringifiedjsondata)
{
    // test
    string jsonizedData = stringifiedjsondata;
}

还要更改Winforms客户端代码:

string dataAsJson = "[{\"ItemDescription\": \"DUCKBILLS, GRAMPS-EIER 70CT  42#\",\"PackagesMonth1\": 1467}]";
String uriToCall = String.Format("/api/produceusage/{0}/{1}/{2}", _unit, beginRange, endRange);
var content = new FormUrlEncodedContent(new[]
{
    new KeyValuePair("", dataAsJson)
});

HttpResponseMessage response = await client.PostAsync(uriToCall, content);

现在它应该按预期工作.查看有关HTTP客户端库的此链接,以便查看有关在需要时将数据发送到API的更多示例.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有