HttpClient'e Http Üstbilgileri Ekleme


158

Herşey:

Bir web hizmetine istek göndermeden önce HttpClient'e http üstbilgileri eklemeniz gerekir. Bireysel bir istek için bunu nasıl yapabilirim (gelecekteki tüm isteklerin HttpClient'in aksine)? Bunun mümkün olup olmadığından emin değilim.

var client = new HttpClient();
var task =
    client.GetAsync("http://www.someURI.com")
    .ContinueWith((taskwithmsg) =>
    {
        var response = taskwithmsg.Result;

        var jsonTask = response.Content.ReadAsAsync<JsonObject>();
        jsonTask.Wait();
        var jsonObject = jsonTask.Result;
    });
task.Wait();

Yanıtlar:


246

A oluşturun HttpRequestMessage, yöntemi olarak GETayarlayın, başlıklarınızı ayarlayın ve SendAsyncyerine kullanın GetAsync.

var client = new HttpClient();
var request = new HttpRequestMessage() {
    RequestUri = new Uri("http://www.someURI.com"),
    Method = HttpMethod.Get,
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
var task = client.SendAsync(request)
    .ContinueWith((taskwithmsg) =>
    {
        var response = taskwithmsg.Result;

        var jsonTask = response.Content.ReadAsAsync<JsonObject>();
        jsonTask.Wait();
        var jsonObject = jsonTask.Result;
    });
task.Wait();

2
Teşekkürler, Darrel! Bunu HttpClientyapabileceğini görene kadar hayal kırıklığına uğradım .
Sam

23
@ Talon 406'nın anlamı budur. İstemci, sunucunun desteklemediği bir ortam türü istedi. Hangi ortam türünü aldığınız umurumda değilse, bunu istemeyin. OP basitçe bir isteğe nasıl başlık ekleyeceğini soruyordu. Sadece rastgele bir örnek seçtim.
Darrel Miller

15
Muhtemelen var response = await client.SendAsyncyerine bugünlerde ContinueWithvetask.Wait()
Michael Parker

1
@MichaelParker Gerçekten.
Darrel Miller

1
En iyi performans için, bunun gibi bir HTTP istemcisi başlatmamanız gerektiğini lütfen unutmayın.
Bununla

16

Tüm istekler için aynı başlık olabiliyorsa veya her istekten sonra istemciyi elden çıkarırsanız, DefaultRequestHeaders.Addseçeneği kullanabilirsiniz :

client.DefaultRequestHeaders.Add("apikey","xxxxxxxxx");      

3
Bu ileriye HttpClient tarafından gönderilen tüm iletilere üstbilgi eklediğine inanıyorum. Bu OP'nin noktasıyla çelişiyor: "Bunu bireysel bir istek için nasıl yaparım (HttpClient'in gelecekteki tüm isteklerin aksine)?" HttpClient örnekleri bir kez yaratılacak ve birçok kez kullanılacak şekilde tasarlanmıştır.
Flydog57

Bir istek üzerine özel üstbilgiler ayarlamak için, http sunucusuna göndermek üzere httpclient'e iletmeden önce özel üstbilgiyle bir istek oluşturun. Varsayılan başlık httpclient üzerinde her istek sunucuya gönderilecek şekilde ayarlanmıştır.
Zimba

0

İSTEĞE BAĞLI özel üstbilgileri ayarlamak için, http sunucusuna göndermek üzere httpclient'e iletmeden önce özel üstbilgiyle bir istek oluşturun. Örneğin:

HttpClient client = HttpClients.custom().build();
HttpUriRequest request = RequestBuilder.get()
  .setUri(someURL)
  .setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
  .build();
client.execute(request);

Varsayılan başlık HTTPCLIENT ON SET her sunucuya istek göndermek için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.