繁体   English   中英

如何使用 HttpClient 发送 HTTP PUT 请求?

[英]How do I send a HTTP PUT request with HttpClient?

我有一个正在尝试写入的 web 服务,但每次我尝试向它发送PUT请求时,我都会收到'Bad Request(400)' Error 我正在使用 ASP.NET MVC 框架,并且在我的一个控制器中设置了所有内容。 我也有一个 model 来模拟应该发送到 API 的数据。 这就是我设置所有内容的方式:

放置FUNCTION

public string putFunction(ItemOject item)
    {
        // PROVIDED DETAILS
        string API_PATH = "API_PATH";

        // CONTENT
        var content = new StringContent(JsonConvert.SerializeObject(item));
        
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Add("Key1", KEY_1);
        client.DefaultRequestHeaders.Add("Key2",KEY_2);
        client.DefaultRequestHeaders.Add("Key3", KEY_3);

        // KEYS and BASE_URL are defined outside the function
        var response = client.PutAsync($"{BASE_URL}{API_PATH}", content).Result;

        return response.ToString();
      
    }

这是参数“项目”正在传递的内容:

ItemObject item = new ItemObject
        {
            Name = "Test2",
            Errors = null,
            ID = "8c785cd5-673a-4b3c-b97d-b8446dad401a",
            OwnerID = "30e5772a-a11c-4172-96ae-cc850bd6509a"
        };

这是我得到的回应:

StatusCode: 400, ReasonPhrase: 'Bad Request'

我很肯定所有的 KEYS 都设置正确并且 URL 是正确的。 端点确实有效,因为我已经在 Postman 中对其进行了测试,没有任何问题。 现在唯一的事情是我无法从这个 function 发送 HTTP PUT 请求。 我一直在努力确保我在 Postman 中发送的数据几乎正是我从这个 function 发送的数据。 我不知道我错过了什么或我可以尝试更多的测试。

这是我的 Postman 请求:

{"Item": 
    {
        "Errors": null,
        "ID": "8c785cd5-673a-4b3c-b97d-b8446dad401a",
        "Name": "Test1",
        "OwnerID": "00000000-0000-0000-0000-000000000000"
    }
}

如果我要再次发送 GET 请求,它在 Postman 中工作正常,它会检索所述数据。 但是我不能在 ASP.NET 中这样做,而不会出现“错误请求(400)”错误。

到目前为止我已经尝试过:

找不到如何使用 HttpContent

将 ASP.NET MVC HttpContext 发送到 Web Api HttpContext

https://www.c-sharpcorner.com/article/asp-net-web-api-using-mvc-entity-framework-and-httpclient-for-get-and-post-with/

序列化您当前的 object 将导致:

{
    "Errors": null,
    "ID": "8c785cd5-673a-4b3c-b97d-b8446dad401a",
    "Name": "Test1",
    "OwnerID": "00000000-0000-0000-0000-000000000000"
}

但是你传递给 Postman 的是这样的:

{
    "Item": 
    {
        "Errors": null,
        "ID": "8c785cd5-673a-4b3c-b97d-b8446dad401a",
        "Name": "Test1",
        "OwnerID": "00000000-0000-0000-0000-000000000000"
    }
}

所以你的 model 应该看起来更像:

ItemObject item = new ItemObject()
{
    Item  = new ItemSubObject()
    {
        Name = "Test2",
        Errors = null,
        ID = "8c785cd5-673a-4b3c-b97d-b8446dad401a",
        OwnerID = "30e5772a-a11c-4172-96ae-cc850bd6509a"
    }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM