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
。