[英]posting with web client returning a 400 bad request
編輯。 建議提琴手的人很棒。 原來我發布的API很奇怪,因為C#應用程序沒有用戶代理。 所以在標題中添加一個固定
我正在嘗試使用C#Web客戶端發布到api,但似乎遇到了麻煩。 我正在嘗試使用此代碼將json發布到api,但是我得到的只是400個錯誤的請求,我不確定發生了什么。
output = "{ \"id\": \"xxxxxx\", \"company\": \"test\", \"fname\": \"test\", \"lname\": \"test\", \"member_level\": \"Member\",\"status\": \"active\"}";
using (var client = new WebClient())
{
client.Headers.Add("token", "validtoken");
client.Headers.Add("Content-Type", "application/json");
client.UploadString(new Uri("url"), "POST", output);
}
我能夠使用powershell成功使用webrequest發布信息,因此我知道url和auth令牌有效。 但是無論出於什么原因,我都無法使C#正確發布。 這是有效的powershell命令
curl url -Method POST -H @{"token" = "token"} -ContentType "application/json" -Body '{ "id": "xxxxxx", "company": "test", "fname": "test", "lname": "test", "member_level": "test","status": "active"}'
代替
client.UploadString(new Uri("url"), "POST", output);
采用
client.UploadData(url, "POST", Encoding.UTF8.GetBytes(output));
只需使用C#的內置功能即可保持代碼干凈。 在可能的情況下,創建描述用於API通信的合同的類。 不需要低級控制時,請使用HttpClient。 HttpClient可以將這些對象作為JSON發送,並且您通常不需要關心序列化問題。
替換網址部分后,此代碼應進行POST。 由於您沒有發送令牌,因此應該會出現401錯誤-您無權。 添加您的有效令牌,刪除注釋,此請求應該可以使用。
using System;
using System.Collections.Generic;
using System.Net.Http;
public class User
{
public string Id { get; set; }
public string Company { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public string MemberLevel { get; set; }
public string Status { get; set; }
}
class Program
{
static void CreateUser(User user)
{
using (var client = new HttpClient())
{
// posts to https://yourawesomewebsite.com/api/users
client.BaseAddress = new Uri("https://yourawesomewebsite.com");
//client.Headers.Add("token", "validtoken");
HttpResponseMessage response = client.PostAsJson("api/users", user);
response.EnsureSuccessStatusCode();
}
}
static void Main()
{
// Create a new user
User user = new User
{
Id = "xxxxx",
Company = "Test",
FName = "Test",
LName = "Test",
MemberLevel = "Test",
Status = "Active"
};
CreateUser(user);
}
}
參考
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.