我有兩個 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 格式問題或資料格式,這就是為什么我要求以正確的方式在我的控制器中表示請求的主體。
uj5u.com熱心網友回復:
就像我在評論中所說的那樣,您應該真正學習 JSON、OOP 和序列化/反序列化的基礎知識,您的代碼與 .Net 良好實踐指南相去甚遠。所有你需要的是:
public async Task<HttpResponseMessage> SaveShortCodes([FromBody] ShortCode sh)
{
return await client.PostAsync("http://myUrl/url/generateShortcodes", JsonConvert.SerializeObject(sh));
}
public class UrlCascade
{
[JsonPropertyName("customerId")]
public int CustomerId { get; set; }
[JsonPropertyName("evenement")]
public string Evenement { get; set; }
[JsonPropertyName("userId")]
public int UserId { get; set; }
[JsonPropertyName("targetItemId")]
public int TargetItemId { get; set; }
[JsonPropertyName("expireAt")]
public DateTime ExpireAt { get; set; }
}
public class ShortCode
{
[JsonPropertyName("urlOrigin")]
public string UrlOrigin { get; set; }
[JsonPropertyName("urlCascade")]
public List<UrlCascade> UrlCascade { get; set; }
}
uj5u.com熱心網友回復:
使用Newtonsoft.Json庫并將saveShortCodes方法更改為:
public async Task<HttpResponseMessage> saveShortCodes([FromBody] ShortCode sh)
{
var json = JsonConvert.SerializeObject(sh);
var httpContent = new StringContent(json, 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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395911.html
