.NET Core 中读取 Request.Headers 的姿势

Request.Headers 的类型是 IHeaderDictionary 接口,对应的实现类是 HeaderDictionary ,C# 实现源码见 HeaderDictionary.cs 。

HeaderDictionary 实际就是一个用于 保存 StringValues 的 KeyValuePair 。通过索引器访问时,如果 Request.Headers[HeaderName] 对应的值不存在,会返回 StringValues.Empty ,所以不需要进行 null 引用检查。索引器的实现实际就是 TryGetValue + StringValues.Empty 。

读取方法一:先 TryGetValue ,然后 FirstOrDefault

if (!Request.Headers.TryGetValue(ApiKeyHeaderName, out var apiKeyHeaderValues))
{
    return AuthenticateResult.NoResult();
}
var providedApiKey = apiKeyHeaderValues.FirstOrDefault();

这个方法的好处是可以通过 bool 返回值来判断读到是否成功。

读取方法二:直接 FirstOrDefault

var providedApiKey = Request.Headers[ApiKeyHeaderName].FirstOrDefault();

只读取第一个出现的值,如果对应的值不存在,会返回 null

读取方法三:直接 ToString()

var providedApiKey = Request.Headers[ApiKeyHeaderName].ToString();

读取指定 key 都对应的所有值,并用 , 连接, 如果对应的值不存在,会返回 string.Empty

你可能感兴趣的:(.NET Core 中读取 Request.Headers 的姿势)