C# 是否可以将请求标题与其他列表相交?

C# 是否可以将请求标题与其他列表相交?,c#,asp.net,asp.net-web-api,httprequest,visual-studio-2017,C#,Asp.net,Asp.net Web Api,Httprequest,Visual Studio 2017,我正在尝试与标题列表相交: var validHeaders = Request.Headers.ToArray().Intersect(ValidHeaders.List); 其中,有效领导的定义如下: public static class ValidHeaders { public static readonly IList<string> List = new ReadOnlyCollection<string> (new List<str

我正在尝试与标题列表相交:

var validHeaders = Request.Headers.ToArray().Intersect(ValidHeaders.List);
其中,有效领导的定义如下:

public static class ValidHeaders
{
    public static readonly IList<string> List = new ReadOnlyCollection<string>
    (new List<string>
    {
        "Content-Type",
        "DataServiceVersion",
        "MinDataServiceVersion",
        "Accept",
        "If-Match",
        "If-None-Match",
        "Prefer"
    });
}
公共静态类有效头
{
公共静态只读IList列表=新的只读集合
(新名单
{
“内容类型”,
“数据服务版本”,
“MinDataServiceVersion”,
“接受”,
“如果匹配”,
“如果没有匹配”,
“更喜欢”
});
}

如何将HttpRequestHeaders列表与另一个列表相交?

返回所有标头及其值,这些标头的
键(标头名称)位于
ValidHeaders.list

var validHeaders = Request.Headers.Where(header => ValidHeaders.List.Any(k => string.Equals(k, header.Key, StringComparison.InvariantCultureIgnoreCase)));
这可以作为扩展方法添加到static
ValidHeader
类中

public static class ValidHeaders {
    public static readonly IList<string> List = new ReadOnlyCollection<string>(new List<string>
    {
        "Content-Type",
        "DataServiceVersion",
        "MinDataServiceVersion",
        "Accept",
        "If-Match",
        "If-None-Match",
        "Prefer"
    });

    public static IEnumerable<KeyValuePair<string, IEnumerable<string>>> GetValidHeaders(this HttpRequestMessage request) {
        var validHeaders = request.Headers.Where(header => ValidHeaders.List.Any(k => string.Equals(k, header.Key, StringComparison.InvariantCultureIgnoreCase)));
        return validHeaders;
    }
}

我们不需要不区分大小写的比较?在本例中,列表中的值与HttpRequestHeader中使用的大小写匹配。很容易修改代码以忽略大小写,但标题的大小写是否会有所不同?是的,手工编制的请求可能会有大小写不同的标题。
var validHeaders = Request.GetValidHeaders();