具有多个记录的HttpClient DeleteAsync

时间:2016-02-17 22:47:26

标签: c# httpclient

我在这里使用sendgrid api:

https://sendgrid.com/docs/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.html#Delete-a-Recipient-DELETE

它显示将一个字符串数组传递给DELETE调用。当我查看System.Net.Http.HttpClient的签名时,DELETE不允许传入内容。

是否有一个围绕DELETE的标准,不允许同时传递多个内容?

enter image description here

API定义:

enter image description here

2 个答案:

答案 0 :(得分:0)

The HTTP/1.1 RFC states that a DELETE request's payload has no defined semantics

包含有效负载并不违法,但这意味着如果包含有效负载,则应忽略它。

许多HTTP客户端(例如.NET框架提供的HTTP客户端)在没有为该方法定义语义时,不提供包含有效负载的接口。

不幸的是,许多REST API确实需要使用这些方法的有效负载。您可以通过手动创建HttpRequestMessage对象,设置MethodContent属性,并将其传递给HTTP客户端的SendAsync方法来实现此目的。

答案 1 :(得分:0)

创建扩展方法

public static class HttpClientExtensions
{
    public static Task<HttpResponseMessage> Delete(this HttpClient client, HttpContent content)
    {
        var request = new HttpRequestMessage { Method = "DELETE", Content = content);
        return client.SendAsync(request);
    }
}

但我无法推荐它,因为它打破了HTTP的基本假设,允许有效的HTTP代理工作。

&#34;正确的方法&#34;围绕这个问题是使用HTTP 2.0(或HTTP 1.1 Pipelining,由于它大部分被破坏而被弃用,但你可以尝试一下)来创建多个DELETE请求。从理论上讲,解决方案不需要任何代码更改。