У меня есть HttpClient
, что является общим для нескольких потоков:Как установить HTTPHeader по индивидуальному заказу с использованием HttpClient
public static class Connection
{
public static HttpClient Client { get; }
static Connection()
{
Client = new HttpClient
{
BaseAddress = new Uri(Config.APIUri)
};
Client.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
Client.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
}
Он имеет некоторые стандартные заголовки я положить на каждый запрос. Однако, когда я использую его, я хочу, чтобы добавить на заголовок для просто что просить:
var client = Connection.Client;
StringContent httpContent = new StringContent(myQueueItem, Encoding.UTF8, "application/json");
httpContent.Headers.Add("Authorization", "Bearer " + accessToken); // <-- Header for this and only this request
HttpResponseMessage response = await client.PostAsync("/api/devices/data", httpContent);
response.EnsureSuccessStatusCode();
string json = await response.Content.ReadAsStringAsync();
Когда я делаю это, я получаю исключение:
{ "злоупотреблянный имя заголовка. Убедитесь, что заголовки запроса используются с HttpRequestMessage, заголовки ответа с HttpResponseMessage и заголовки содержимого с HttpContent объектов. "}
Я не смог найти другой способ добавить заголовки запросов к этому запросу. Если я изменил DefaultRequestHeaders
на Client
, я столкнулся с проблемами потоков и должен был реализовать всевозможные сумасшедшие блокировки.
Любые идеи?
Awesome! Это работает. Я также добавил свой рабочий код к вашему ответу. '+ 1' –