in sdk/Util/OssRequestSignerV4.cs [210:243]
private static string CanonicalizeHeaders(IDictionary<string, string> headers, List<string> additionalHeaders)
{
if (headers == null || headers.Count == 0)
return string.Empty;
var addHeadersMap = new Dictionary<string, string>();
foreach (var header in additionalHeaders)
{
addHeadersMap[header.ToLowerInvariant()] = string.Empty;
}
var sortedHeaderMap = new SortedDictionary<string, string>(StringComparer.Ordinal);
foreach (var header in headers)
{
if (header.Value == null)
{
continue;
}
var lowerKey = header.Key.ToLowerInvariant();
if (IsDefaultSignedHeader(lowerKey) ||
addHeadersMap.ContainsKey(lowerKey))
{
sortedHeaderMap[lowerKey] = header.Value.Trim();
}
}
var sb = new StringBuilder();
foreach (var header in sortedHeaderMap)
{
sb.AppendFormat("{0}:{1}\n", header.Key, header.Value.Trim());
}
return sb.ToString();
}