[英]In JavaScript & JSON, why is the result of str = JSON.stringify(obj); equal to {}?
[英]Sending Post with JSON.stringify(obj) in body doesn't result in a string on API recieving side
所以我在這個場景上有點卡住了。
我有一個前端通過 Axios 向我的 API 發送以下請求:
const objectInBody = {
Id,
Input
};
const result: any = await axios.Post(`Order/Reservation`, JSON.stringify(objectInBody));
return result.data;
我有一個 RESTful .NET Core API 正在運行,可以接收這些請求。
相關路由邏輯:
[HttpPost("[action]")]
public async Task<IActionResult> Reservation([FromBody] string jsonObj)
{
Reservation reservation = JsonConvert.DeserializeObject<Reservation>(jsonObj);
try
{
var result = await orderManager.Reserve(reservation);
return Ok(result);
}
catch (Exception e)
{
return BadRequest(e.Message);
}
}
這里的問題是,我的 API 阻止了請求,因為我的 API 無法將 'JSON.stringify(objectInBody)' 識別為字符串並且不會運行代碼。
當我傳遞其他字符串時,API 毫無問題地接受它並繼續邏輯。 這對我來說很奇怪,因為我認為 JSON.stringify 結果是字符串類型?
在 console.log(JSON.stringify(objectInBody)); 我得到 {Id:1, Input:1} 沒有引號。
但是當我 console.log(typeof(JSON.stringify(objectInBody))); 它確實在我的控制台中說“字符串”。
我還可以將 API 中的“預期”類型調整為 JsonObject 或其他類型,但這是一個糟糕的“修復”,因為在我看來 Json.Stringify 必須返回一個字符串並毫無問題地傳遞它,就像我說的那樣,當然不是 JsonObject。
您當前的代碼不起作用的原因是因為 Axios 不會為字符串有效負載自動發送Content-Type: application/json 。 因此,要使您當前的解決方案起作用,您必須這樣做(請按照我在本答案末尾的建議):
const result: any = await axios.post("Order/Reservation", JSON.stringify(objectInBody), {headers: {"Content-Type": "application/json"}});
推薦方案
您應該像這樣更改控制器方法:
[HttpPost("[action]")]
public async Task<IActionResult> Reservation([FromBody] Reservation reservation)
{
try
{
var result = await orderManager.Reserve(reservation);
return Ok(result);
}
catch (Exception e)
{
return BadRequest(e.Message);
}
}
然后像這樣改變你的 Axios 調用:
const result: any = await axios.post(`Order/Reservation`, objectInBody);
假設Reservation類是這樣的
public class Reservation
{
public string Id {get; set;}
public string Input {get; set;}
}
試試這個代碼
objectInBody = {
Id:"id",
Input: "input"
};
const result: any = await axios.Post('/Order/Reservation',
{ jsonObj:JSON.stringify(objectInBody)});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.