【发布时间】:2021-12-28 12:42:11
【问题描述】:
我有两个 web API,我想从另一个 api 使用一个 api 的端点,但是这个端点的主体包含这样的 json 对象数组:
{
"urlOrigin": "string",
"urlCascade": [
{
"customerId": 0,
"evenement": "string",
"userId": 0,
"targetItemId": 0,
"expireAt": "2021-12-28T12:25:20.606Z"
}
]
}
我所做的是:
public async Task<HttpResponseMessage> saveShortCodes([FromBody] ShortCode sh)
{
Dictionary<String, dynamic> header = new Dictionary<String, dynamic>();
Dictionary<String, dynamic> request2 = new Dictionary<String, dynamic>();
List<Dictionary<String, dynamic>> body = new List<Dictionary<String, dynamic>>();
header.Add("urlOrigin", sh.urlOrigin);
for(var i=0; i < sh.urls.Count; i++)
{
request2.Add("customerId", sh.urls[i].CustomerId);
request2.Add("evenement", sh.urls[i].Evenement);
request2.Add("userId", sh.urls[i].UserId);
request2.Add("expireAt", sh.urls[i].ExpireAt);
if(sh.urls[i].TargetItemId!=null)
request2.Add("targetItemId", sh.urls[i].TargetItemId);
body.Add(request2);
}
header.Add("urlCascade", body);
var httpContent = new StringContent(header.ToString(), System.Text.Encoding.UTF8, "application/json");
String uri = "http://myUrl/url/generateShortcodes";
var response = client.PostAsync(uri, httpContent).GetAwaiter().GetResult();
Console.Write("response " + response);
return response;
}
这是我身体的结构:
public class ShortCode
{
public string urlOrigin { get; set; }
public List<urlCascade> urls { get; set; }
public ShortCode()
{
}
}
public class urlCascade
{
public int CustomerId { get; set; }
public String Evenement { get; set; }
public int UserId { get; set; }
public int? TargetItemId { get; set; }
public DateTime ExpireAt { get; set; }
public urlCascade()
{
}
}
当我尝试使用如图所示的端点时,我得到:
dbug: Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter[1]
JSON input formatter threw an exception.
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: S. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonReader.ReadAndMoveToContent()
at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter: Debug: JSON input formatter threw an exception.
这似乎是一个 json 格式问题或数据格式,这就是为什么我要求在我的控制器中以正确的方式表示请求的主体。
【问题讨论】:
-
重命名公共列表
urls { get;放; } 进入公共列表 urlCascade { 获取;放; } -
另外,我可以推荐您使用app.quicktype.io 从您提供的 json 示例中检索 C# 类。这对于那些不想为其 JSON 字符串手动生成模型的人非常有帮助。
-
我真的建议你尽快学习基本的 OOP 和 JSON/JSON 序列化