如何向HttpClient请求添加自定义报头?我使用PostAsJsonAsync方法来发布JSON。我需要添加的自定义标头是

"X-Version: 1"

这是我目前所做的:

using (var client = new HttpClient()) {
    client.BaseAddress = new Uri("https://api.clickatell.com/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxxxxxxxxxxxxxxxxxxx");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var response = client.PostAsJsonAsync("rest/message", svm).Result;
}

当前回答

如果有人想知道如何调用httpClient.GetStreamAsync(),它没有重载,需要HttpRequestMessage来提供自定义头,您可以使用@Anubis给出的上述代码并调用

等待response.Content.ReadAsStreamAsync ()

特别有用,如果你返回一个blob url范围头作为一个FileStreamResult

其他回答

我已经找到了问题的答案。

client.DefaultRequestHeaders.Add("X-Version","1");

这将为您的请求添加一个自定义标头

你也可以使用HttpClient。PostAsync方法:

using (HttpClient http_client = new HttpClient())
{
   StringContent string_content = new StringContent(JsonSerializer.Serialize("{\"field\":\"field_value\"}"));
   string_content.Headers.Add("X-Version","1");
   using (HttpResponseMessage response = await http_client.PostAsync("http://127.0.0.1/apiMethodName", string_content))
   {
      if (response.IsSuccessStatusCode)
      {
         Console.WriteLine($"Response status code: {response.StatusCode}");
      }
      else
      {
         Console.WriteLine($"Error status code: {response.StatusCode}");
      }
   }
}

HttpRequestMessage类中有一个Headers属性。您可以在那里添加自定义报头,它将随每个HTTP请求一起发送。另一方面,HttpClient类中的DefaultRequestHeaders设置使用该客户端对象发送的每个请求一起发送的报头,因此称为默认请求报头。

希望这能让事情更清楚,至少对将来看到这个答案的人来说。

如果有人想知道如何调用httpClient.GetStreamAsync(),它没有重载,需要HttpRequestMessage来提供自定义头,您可以使用@Anubis给出的上述代码并调用

等待response.Content.ReadAsStreamAsync ()

特别有用,如果你返回一个blob url范围头作为一个FileStreamResult

以下是基于Anubis的回答(这是一个更好的方法,因为它不修改每个请求的头),但更相当于原始问题中的代码:

using Newtonsoft.Json;
...

var client = new HttpClient();
var httpRequestMessage = new HttpRequestMessage
    {
        Method = HttpMethod.Post,
        RequestUri = new Uri("https://api.clickatell.com/rest/message"),
        Headers = { 
            { HttpRequestHeader.Authorization.ToString(), "Bearer xxxxxxxxxxxxxxxxxxx" },
            { HttpRequestHeader.Accept.ToString(), "application/json" },
            { "X-Version", "1" }
        },
        Content = new StringContent(JsonConvert.SerializeObject(svm))
    };

var response = client.SendAsync(httpRequestMessage).Result;