【发布时间】:2020-07-28 15:35:50
【问题描述】:
问题陈述:
我正在尝试使用 JSON 数据将数据发布到 C# 中的测试 url 失败,但是当我在 Postman 中尝试相同的事情时它成功了。
C# 代码 sn-p
string uploadPath = @"https://api.test.com/test";
string jsonData = "{ \"message\":\"ERROR: ABCDEXY: Price\"," +
"\"source\":\"BYODB\"," +
"\"tag\":[\"ABXT\",\"I232-F103\"],\"ID\":\"{76573406E8}\"}";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "apiKey " + "7cbafstad-677654c4-8765fgt-95deb");
var content= new StringContent(jsonData, Encoding.UTF8, "application/json");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = client.PostAsync(uploadPath, content).Result;
var responseBody = response.Content.ReadAsStringAsync().Result;
if (response.IsSuccessStatusCode)
{
var sucessRes = JsonConvert.DeserializeObject<dynamic>(responseBody);
//Print Success Msg
}
else
{
var failureRes = JsonConvert.DeserializeObject<dynamic>(responseBody);
//Print Failure Msg
}
}
异常详情:
对于响应对象,我正在接收:
response = {StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Transfer-Encoding: chunked
Connection: keep-alive
X-Response-Time: 0.001
X-Request-ID: 4514d1b-1a3f-4277-9997-2813cd9d28ed
X-Rat...
对于响应正文,我收到:
{"message":"Invalid JSON","took":0.001,"requestId":"4514d1b-1a3f-4277-9997-2813cd9d28ed"}
当我尝试通过邮递员调用它时,它成功了:
我在 C# JSON Post 中做错了什么?
【问题讨论】:
-
使用像wireshark或fiddler这样的嗅探器。比较 c# 和 postman 之间的第一个请求的标头。使 c# 标头看起来像 Postman。 c# 默认的 headers 和 postman 不一样。
-
服务器绝对正确:您的 JSON 无效 有效。您在邮递员中发送的内容包括反斜杠-r-反斜杠-n,但您的字符串在值的中间包含回车符和换行符,这不是有效的 JSON。
-
如果您将
\r\n更改为\\r\\n可能会很好地解决问题,但我同意 Janothan Alfaro 的观点,即最好不要尝试手工制作 JSON。
标签: c# .net json.net httpclient