Я полагаю, что вы обнаружили проблему с кодом в репозитории Github.
По существу проблема возникает из-за следующих строк кода:
foreach (var item in values.AllKeys.OrderBy(k => k))
{
sb.Append('\n').Append(item).Append(':').Append(values[item]);
}
return sb.ToString().ToLower();
По существу, что это за код делает, берет все параметры строки запроса (имя и значение) и добавляет их в формате name:value
, а затем, наконец, преобразует всю строку в нижний регистр (и это проблема).
Согласно documentation
, следует преобразовывать только имя ключа в нижний регистр, а не часть значения.
Чтобы устранить эту проблему, используйте следующий код:
/// <summary>
/// This part of the signature string represents the storage account
/// targeted by the request. Will also include any additional query parameters/values.
/// For ListContainers, this will return something like this:
/// /storageaccountname/\ncomp:list
/// </summary>
/// <param name="address">The URI of the storage service.</param>
/// <param name="accountName">The storage account name.</param>
/// <returns>String representing the canonicalized resource.</returns>
private static string GetCanonicalizedResource(Uri address, string storageAccountName)
{
// The absolute path is "/" because for we're getting a list of containers.
StringBuilder sb = new StringBuilder("/").Append(storageAccountName).Append(address.AbsolutePath);
// Address.Query is the resource, such as "?comp=list".
// This ends up with a NameValueCollection with 1 entry having key=comp, value=list.
// It will have more entries if you have more query parameters.
NameValueCollection values = HttpUtility.ParseQueryString(address.Query);
foreach (var item in values.AllKeys.OrderBy(k => k))
{
sb.Append('\n').Append(item.ToLower()).Append(':').Append(values[item]);
}
return sb.ToString();//We should not be converting entire thing to lower case.
}
Тем не менее, обратите внимание, что это все еще не на 100% правильно, так как не учитывает пункт № 9, упомянутый на скриншоте выше, но для вашей цели это должно работать.