189

在向 Web 服务发送请求之前,我需要将 http 标头添加到 HttpClient。我如何为单个请求执行此操作(而不是在 HttpClient 上对所有将来的请求)?我不确定这是否可能。

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();
4

3 回答 3

294

创建一个HttpRequestMessage,将 Method 设置为GET,设置您的标题,然后使用SendAsync而不是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();
于 2012-08-19T00:31:52.727 回答
42

如果它可以是所有请求的相同标头,或者您在每个请求后处置客户端,则可以使用以下DefaultRequestHeaders.Add选项:

client.DefaultRequestHeaders.Add("apikey","xxxxxxxxx");      
于 2019-02-14T17:03:07.873 回答
-4

要在请求上设置自定义标头,请使用自定义标头构建请求,然后将其传递给 httpclient 以发送到 http 服务器。例如:

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

默认标头设置为 HTTPCLIENT 以在每个请求上发送到服务器。

于 2019-12-16T15:08:34.010 回答