[英]How can I send a boolean body to HttpClient.PutAsync or HttpClient.PostAsync?
我正在嘗試調用接受單個布爾值作為主體的PUT
服務。 當我從 Javascript 或 Swagger 測試它時,該服務可以工作,但它拒絕了我從 .NET 發出的請求。
這有效(Javascript):
fetch(URL, {
headers: {
'Content-Type': 'application/json',
'Authorization': `bearer ${TOKEN}`
},
method: 'PUT',
body: true,
});
這不起作用(.NET):
private static async Task<string> RunTest(bool b)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {TOKEN}");
var content = new StringContent(b.ToString(), Encoding.UTF8, "application/json");
HttpResponseMessage result = await client.PutAsync(URL, content);
return result.ToString();
}
}
服務器為我的 .NET 請求返回400
。 但正如我所說,當我使用fetch
或其他方式進行測試時,它是有效的。 所以我假設我在 .NET 中做錯了什么。
如何將布爾主體傳遞給HttpClient.PutAsync
?
正如@Nkosi 在評論中所建議的那樣,我需要將布爾值序列化為 JSON 而不僅僅是調用ToString
。
問題似乎是ToString
產生True
或False
大寫值,而不是預期的小寫值true
或false
。
所以我添加了對Json.NET的引用並將代碼更改為:
private static async Task<string> RunTest(bool b)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {TOKEN}");
var content = new StringContent(JsonConvert.SerializeObject(b), Encoding.UTF8, "application/json");
HttpResponseMessage result = await client.PutAsync(URL, content);
return result.ToString();
}
}
這有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.