簡體   English   中英

如何將布爾正文發送到 HttpClient.PutAsync 或 HttpClient.PostAsync?

[英]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產生TrueFalse大寫值,而不是預期的小寫值truefalse

所以我添加了對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM