2016-08-16 8 views
5

Mam scenariusz, gdzie trzeba zadzwonić mój Web API Usuń sposób skonstruowany tak:Przechodząc zawartości ciała podczas wywoływania metody Delete Web API z wykorzystaniem System.Net.Http

// DELETE: api/products/{id}/headers 
[HttpDelete("{id}/headers")] 
public void DeleteProductHeaders(int id, [FromBody] string query) 
{ 
} 

Sztuką jest to, że w aby uzyskać zapytanie, muszę wysłać je przez ciało, a DeleteAsync nie ma paramu dla json jak post. Czy ktoś wie, jak mogę to zrobić przy użyciu klienta System.Net.Http w języku C#?

// Delete a product's headers 
public void DeleteProductHeaders(int id, string query) 
{ 
    using (var client = GetClient()) 
    { 
     HttpResponseMessage response; 
     try 
     { 
      // HTTP DELETE 
      response = client.DeleteAsync($"api/products/{id}/headers").Result; 
     } 
     catch (Exception ex) 
     { 
      throw new Exception("Unable to connect to the server", ex); 
     } 
    } 
    return retVal; 
} 
+1

Można spróbować tworząc 'HttpRequestMessage' ręcznie metodą usunąć i The' HttpContent' następnie użyj 'HttpClient.SendAsync' – Nkosi

Odpowiedz

2

Myślę, że powodem HttpClient został zaprojektowany w ten sposób jest chociaż HTTP 1.1 Spec pozwala treść wiadomości na DELETE wniosków, zasadniczo nie należy się spodziewać, aby to zrobić jako spec nie definiuje żadnych semantykę dla niego, jak to jest zdefiniowano here. HttpClient ściśle przestrzega specyfikacji HTTP, więc widzisz, że nie pozwala ci dodać treści wiadomości do żądania.

Tak, myślę, że twoja opcja ze strony klienta obejmuje użycie HttpRequestMessage opisanego w here. Jeśli chcesz go naprawić z backendu i jeśli twoja treść wiadomości działałaby dobrze w parach zapytań, możesz spróbować tego zamiast wysyłać zapytanie w treści wiadomości.

Osobiście uważam, że funkcja DELETE powinna mieć treść wiadomości i nie powinna być ignorowana na serwerze, ponieważ na pewno istnieją przypadki użycia dla tego, o którym tu wspomniano.

W każdym przypadku bardziej produktywnej dyskusji na ten temat, proszę spojrzeć na this.

2

Oto jak osiągnąć to

var request = new HttpRequestMessage(HttpMethod.Delete, "http://www.example.com/"); 
request.Content = new StringContent(JsonConvert.SerializeObject(object), Encoding.UTF8, "application/json"); 
await this.client.SendAsync(request); 
Powiązane problemy