Weitergabe der Inhalt beim Aufruf einer Delete-Web-API-Methode mit System.Net.Http
Habe ich ein Szenario, wo muss ich anrufen meine Web-API Delete-Methode erstellt, wie die folgenden:
//DELETE: api/products/{id}/headers
[HttpDelete("{id}/headers")]
public void DeleteProductHeaders(int id, [FromBody] string query)
{
}
Der trick ist, dass, um die Abfrage, die ich brauche, um es zu senden durch den Körper und DeleteAsync nicht über einen param für json wie post nicht. Weiß jemand, wie kann ich das machen mit dem System.Net.Http-client in 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;
}
- Sie könnten versuchen, die Schaffung eines
HttpRequestMessage
manuell mit DELETE-Methode und die derHttpContent
dann verwenden Sie dieHttpClient.SendAsync
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie ich es vollbracht
Ich glaube, der Grund HttpClient ist so konzipiert, ist, obwohl HTTP 1.1-Spezifikation erlaubt Nachrichtentext auf LÖSCHEN Anforderungen, im wesentlichen es ist nicht zu erwarten, zu tun, da die spec nicht zur Definition einer Semantik für die es, wie es ist hier. HttpClient folgt ausschließlich HTTP-spec-so sehen Sie es nicht zulässt, dass Sie zum hinzufügen einer Nachricht, die Körper der Anfrage.
So, ich denke, dass Ihr die option die client-Seite enthält mit HttpRequestMessage beschrieben in hier. Wenn Sie möchten, um es zu beheben, von der backend-und, wenn Sie Ihre Nachricht Körper gut funktionieren würde in query params können Sie versuchen, anstatt senden Sie die Abfrage in der Nachricht Körper.
Ich persönlich finde LÖSCHEN sollte erlaubt sein, eine Meldung Körpers und sollten nicht ignoriert werden, in einem server, da es sicherlich Anwendungsfälle, die, wie Sie Sie hier erwähnt.
In jedem Fall für mehr produktive Diskussion über diese bitte haben Sie einen Blick auf diese.
Mein API wie folgt:
Aufruf von C# - server-Seite