HttpClient post 在 C# 中返回错误请求,在邮递员中工作

Dow*_*ers 2 c# rest dotnet-httpclient

我正在尝试访问休息端点https://api.planet.com/auth/v1/experimental/public/users/authenticate。它期望请求正文中有 json。

我可以得到在 Postman 中工作的请求,但不能使用 C#。使用邮递员,我收到预期的无效电子邮件或密码消息,但使用我的代码,无论我尝试如何,我都会收到“错误请求”。

这是发出请求的代码

private void Login()
{
    try
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("https://api.planet.com/");
        client.DefaultRequestHeaders.Accept.Clear();
        //ClientDefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
        Data.User user = new Data.User
        {
            email = "myemail@company.com",
            password = "sdosadf"
        };
        var requestMessage = JsonConvert.SerializeObject(user);
        var content = new StringContent(requestMessage, Encoding.UTF8, "application/json");
        var response = client.PostAsync("auth/v1/experimental/public/users/authenticate", content).Result;
        Console.WriteLine(response.ToString());
    }
    catch (WebException wex )
    {
        MessageBox.Show(wex.Message) ;
    }
}
class User
{
    public string email;
    public string password;
}
Run Code Online (Sandbox Code Playgroud)

以下是邮递员正在工作的屏幕截图 在此输入图像描述

在此输入图像描述

Dow*_*ers 5

使其发挥作用的方法是更改​​内容标题“内容类型”。默认情况下HTTPClient 正在创建content-type: application/json;characterset= UTF8. 我删除并重新创建了没有字符集部分的内容标题,它起作用了。

content.Headers.Remove("Content-Type");
content.Headers.Add("Content-Type", "application/json");
Run Code Online (Sandbox Code Playgroud)