【问题标题】:Is it possible to intersect Request.Headers with another list?是否可以将 Request.Headers 与另一个列表相交?
【发布时间】:2017-07-30 03:37:46
【问题描述】:

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

var validHeaders = Request.Headers.ToArray().Intersect(ValidHeaders.List);

其中 ValidHeaders 定义为:

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"
    });
}

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

【问题讨论】:

    标签: c# asp.net asp.net-web-api httprequest visual-studio-2017


    【解决方案1】:

    返回Key(头名)在ValidHeaders.List中找到的头的所有头及其值

    var validHeaders = Request.Headers.Where(header => ValidHeaders.List.Any(k => string.Equals(k, header.Key, StringComparison.InvariantCultureIgnoreCase)));
    

    这可以作为扩展方法添加到静态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;
        }
    }
    

    使用过

    var validHeaders = Request.GetValidHeaders();
    

    【讨论】:

    • 我们不需要不区分大小写的比较?
    • 在这种情况下,List 中的值匹配 HttpRequestHeader 中使用的情况。易于修改代码以忽略大小写
    • 确实如此,但标题的情况会有所不同吗?
    • 是的,手工制作的请求可能有不同大小写的标头。
    猜你喜欢
    • 2016-08-16
    • 2016-03-23
    • 2021-03-23
    • 1970-01-01
    • 2019-09-11
    • 2011-03-18
    • 2018-04-19
    • 2019-07-15
    • 2018-08-24
    相关资源
    最近更新 更多