首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让HttpHeaders.TryGetValues()返回几个值?

如何让HttpHeaders.TryGetValues()返回几个值?
EN

Stack Overflow用户
提问于 2017-09-27 22:45:26
回答 2查看 2.2K关注 0票数 1

我正在使用HttpHeaders.TryGetValues,但我不知道如何使它返回几个值。

以下是我正在尝试的:

代码语言:javascript
复制
using System.Net.Http;

var response = await new HttpClient().GetAsync("https://httpbin.org/response-headers?X-Numbers=0,1,1,2,3,5,8");
var success = response.Headers.TryGetValues("X-Numbers", out var values);
Console.WriteLine($"{success} ({values.Count()}) -> '{values.First()}'");

其结果是:

True (1) -> '0,1,1,2,3,5,8'

和往常一样,文档非常稀疏,它所显示的关于values参数的全部内容是

指定的标头值。

RFC 2616第4.2节描述了header如何具有多个值(重点是我的):

具有相同字段名的多个消息头字段可能存在于消息中,当且仅当该标头字段的整个字段值被定义为以逗号分隔的列表,即#(值)。必须能够将多个标题字段组合成一个“字段名:字段值”对,而不需要更改消息的语义,方法是将每个后续字段值附加到第一个字段中,每个字段都用逗号分隔。因此,接收具有相同字段名的标头字段的顺序对组合字段值的解释非常重要,因此在转发消息时,代理不能更改这些字段值的顺序。

正如我们所看到的,这些值是逗号分隔的,所以我希望有一个带有7个值的枚举(0112358),但是TryGetValues返回一个字符串值。

我能做些什么让它返回几个值吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-28 13:15:37

TryGetValues返回可枚举的原因是您可以提供同名的多个标头,每个标头也可以有多个以逗号分隔的值,正如您前面提到的。即"https://httpbin.org/response-headers?X-Numbers=0,1,1,2,3,5,8&X-Numbers=6".

我同意最好将每个逗号分隔的值作为返回值中的一个值进行枚举,但当前的实现假设每个标头只能返回一个值。

票数 3
EN

Stack Overflow用户

发布于 2017-09-27 23:36:46

源代码中看,缓存控制头的解析器似乎是唯一的:

缓存控制头是特殊的:它是一个支持值列表的头,但是我们将列表表示为CacheControlHeaderValue的一个实例。也就是说,我们将SupportsMultipleValues设置为true,因为在请求/响应消息中有多个缓存控制头是可以的。但是,在解析所有缓存控制头后,只创建一个CacheControlHeaderValue实例(如果所有头包含有效值,否则可能有多个包含无效值的字符串)。

请求缓存控制总是会返回一个String,据我所知,没有任何方法(除了公关对抗多奈/协菲克斯)来欺骗它来分割它。但是,其他标头将具有不同的行为。

至于为什么以这种方式专门对待Cache-Control头,您必须询问实际的开发人员。自开源版本发布以来,该文件没有发生重大变化。

对于其他已知的标题,有一个很大的列表:KnownHeaders.cs。在那里,您应该能够深入到您感兴趣的任何特定的标题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46458329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档