2016-02-17 22 views
1

我在這裏使用sendgrid API:HttpClient的DeleteAsync與多個記錄

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

+0

它在哪裏指定可以傳遞數組?看起來像一個單一的價值給我。 – usr

+0

我同意@usr - 您鏈接到的國家recipient_id,而不是ID的方法。 –

+0

鏈接到此處的圖片,其中顯示了多個收件人和示例的文檔:https://db.tt/n7RCvZmX –

回答

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方法來完成此操作。

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代理工作的基本假設。

圍繞此問題的「正確方法」是使用HTTP 2.0(或HTTP 1.1管道,由於其大部分已被廢棄,但您可以嘗試使用)來創建多個DELETE請求。理論上說,解決方案不需要任何代碼更改。

+0

謝謝@Aron這聽起來像我可以合作的答案。我忘記了我可以延續課程。我會測試它,然後循環回去,並在測試上述時標記爲已回答。 –