2016-08-16 7 views
5

を使用して削除ウェブAPIメソッドを呼び出すときに、私は次のように構築する方法を削除し、私のウェブAPIを呼び出す必要があるシナリオを持っている本文の内容を渡す:System.Net.Http

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

トリックがでていることです上にクエリを取得するためには、私は本文を介してそれを送信する必要があり、DeleteAsyncにはjsonのようにparamはありません。誰も私がCでSystem.Net.Httpクライアントを使用してこれを行う方法を知っています#?

// 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

を達成する方法であります – Nkosi

答えて

2

私は1.1の仕様がDELETEリクエストにメッセージボディを可能にするHTTPものの、そのように設計されてHttpClientを理由は、基本的にスペックがそれのために任意のセマンティクスを定義していないとして、それがあるとして、そうすることが期待されていない、だと思いますhereと定義される。 HttpClientは厳密にHTTP仕様に従っているため、リクエストにメッセージ本文を追加することはできません。

クライアントサイドのオプションには、hereで説明されているHttpRequestMessageを使用するオプションが含まれていると思います。バックエンドから修正する場合は、メッセージ本体がクエリのパラメータでうまく動作するようにするには、メッセージ本文にクエリを送信するのではなく、それを試すことができます。

私は個人的にはDELETEにメッセージ本文を付けるべきだと思っていますが、ここで言及したような使用例があるので、サーバーでは無視してはいけません。

いずれにしても、より生産的なディスカッションについては、thisをご覧ください。ここで

2

は、私はあなたが `HttpClient.SendAsync`を使用し、その後DELETEメソッドを使って手動で` HttpRequestMessage`を作成してみてくださいと `HttpContent`ことができ、それを

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); 
関連する問題