2017-02-13 4 views
0

Я создаю базовый класс, унаследованный несколькими клиентами для использования. Все они используют разные заголовки.C#: Какой тип используется для коллекции значений заголовков

У меня есть набор значений заголовка, я хочу, чтобы перейти к моему базовому классу с помощью методов «клиента», которые устанавливают client.DefaultRequestHeaders переменного

AuthenticationHeaderValue x = new AuthenticationHeaderValue(authValue.Parameter); 
NameValueHeaderValue y = new NameValueHeaderValue("AMSConnect-Version", "1_0_0"); 
NameValueHeaderValue y2 = new NameValueHeaderValue("AMSConnect-Environment", "Dev"); 

Нормально, я создать что-то вроде этого, если Я только пытался взаимодействовать с API один раз, и один набор заголовков ...

using (HttpClient client = new HttpClient(handler) { BaseAddress = baseAddress }) 
{ 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", this.SttiServiceEnv.AccessToken); 
    client.DefaultRequestHeaders.Add("AMSConnect-Version", "1_0_0"); 
    client.DefaultRequestHeaders.Add("AMSConnect-Environment", "Dev"); 

Однако тип client.DefaultRequestHeaders (HttpRequestHeaders) не имеет сеттеров.

Как создать массив заголовков и передать их клиенту, как это:

using (HttpClient client = new HttpClient(handler) { BaseAddress = baseAddress }) 
{ 
    client.DefaultRequestHeaders = someVariable; 

EDIT: Я получаю, что разрешение будет другой тип, но я надеюсь, что там является контейнером для этого и других типов заголовков.

+0

Почему второй блок кода не работает? То, как вы добавляете свойство 'DefaultRequestHeaders', потому что нет сеттеров. – maccettura

+0

Я создаю базовый класс, унаследованный несколькими клиентами для использования. Все они используют разные заголовки. Добавлено это на вопрос. – CarComp

+0

Хорошо, что побеждает цель клиента DefaultHeaders, вместо этого добавляйте заголовки к каждому запросу. – maccettura

ответ

1

Свойство DefaultRequestHeaders используется, если у вас есть те же заголовки, которые находятся в каждом запросе, который вы делаете с помощью HttpClient. Это избавляет вас от необходимости повторять код каждый раз, когда вы делаете запрос.

Вы работаете в проблему, где у вас есть разные заголовки для каждого запроса, поэтому вместо того, чтобы добавлять эти заголовки в HTTPClient, добавить их к каждому запросу:

//HttpRequestMessage takes an HttpMethod (GET, POST, etc) and a url as parameters. 
using (var request = new HttpRequestMessage(HttpMethod.Get, "/api/users")) 
{ 
    message.Headers.Add("authorization", "bearer 1231098120938123"); 
    var response = await HttpClient.SendAsync(request); 
} 

Кроме того, вы должны знать, что упаковка HttpClient в используемом заявлении для каждого запроса есть плохая практика. See this answer for more details

Смежные вопросы