2017-02-13 17 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.DefaultRequestHeadersHttpRequestHeaders)的类型没有setter方法。

如何创建头的数组并传递给客户这样的:

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

编辑:我明白了,该授权将是一个不同的类型,但我希望有是这个和其他类型的标题的容器。

+0

为什么第二个代码块不起作用?多数民众赞成你如何添加到'DefaultRequestHeaders'属性,因为没有setter。 – 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