簡體   English   中英

通過Web客戶端返回400錯誤請求

[英]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.

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