Http post在Postman中工作但不在C#中使用HttpClient

时间:2018-04-04 10:13:38

标签: c# asp.net-core http-post postman dotnet-httpclient

如果我通过Postman发了一个Http(Https)帖子,一切正常。但是,如果我在.NET核心中使用HttpClient尝试相同的帖子,它就不会工作似乎授权失败或类似的东西,因为response.StatusCode没问题,但如果我读了内容字符串,我会得到一个带有404的HTML页面,并询问我是否要登录。

当然我已经检查过地址等明显的东西,我尝试了不同的令牌(他们总是在邮递员工作)。我还尝试了添加Bearer令牌的不同版本:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

这是目前的代码:

client.BaseAddress = new Uri("www.baseaddress.de");
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
var content = new StringContent(JsonConvert.SerializeObject(new { id = object.Id }), Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync($"/address", content);

邮递员标题: Postman headers

身体:

Postman body

我也尝试过失眠症,它在那里也很完美。也许邮递员在标题中做了一些我不知道的事情?邮差和HttpClient之间有什么共同点?有没有其他人建议我能做什么或试图找到错误?

编辑:

通过在基地址后添加/并在通话前删除它来修复它:

client.BaseAddress = new Uri("www.baseaddress.de/");
HttpResponseMessage response = await client.PostAsync($"address", content);

也许有人知道为什么在基地址的末尾需要/,为什么我不能在API调用之前把它放进去?

2 个答案:

答案 0 :(得分:4)

而不是new { id = object.Id }.ToString()你需要做什么

JsonConvert.SerializeObject(new { id = object.Id })

new { id = 77 }.ToString()之类的代码会生成"{ id = 77 }",而非"{ id: "77" }"

答案 1 :(得分:0)

我遇到了同样的问题,我将地址从 http 更改为 https