Как декодировать metadata_storage_path, созданный индексатором поиска Azure в .NET Core

Использование .NetCore 1.1.2.

После успешного получения результатов поиска с помощью пакета SDK для поиска Azure я пытаюсь декодировать значение metadata_storage_path. Я видел людей, говорящих об использовании HttpServerUtility.UrlTokenDecode в .NET или эквиваленте на других языках как показано здесь.

Тогда возникает вопрос, что эквивалентно HttpServerUtility.UrlTokenDecode в .NetCore? С участием:

var pathEncoded = "aHR0cHM6Ly9mYWtlZC5ibG9iLmNvcmUud2luZG93cy5uZXQvcGRmYmxvYnMvYW5udWFsX3JlcG9ydF8yMDA5XzI0NTU20";

Я пробовал следующее:

var pathbytes = Convert.FromBase64String(pathEncoded); 
//Throws System.FormatException "Invalid length for a Base-64 char array or string."

и

var pathbytes = WebEncoders.Base64UrlDecode(pathEncoded);
//Throws System.FormatException - "TODO: Malformed input."

Интересно, что все работает нормально, если я отключу последний символ в pathEncoded ... Как правильно справиться с этой ситуацией с помощью Microsoft.AspNetCore 1.1.2?


person marcAKAmarc    schedule 02.06.2017    source источник


Ответы (3)


HttpServerUtility.UrlTokenEncode добавляет к закодированной строке дополнительный завершающий символ. Вы все делаете правильно - просто удалите лишний символ и используйте WebEncoders.Base64UrlDecode. Дополнительные сведения см. В этом разделе вопросов и ответов.

person Eugene Shvets    schedule 02.06.2017

Я использовал следующую функцию в asp.net core 2.1 для кодирования значения meta_storage_path из поиска Azure.

private string DecodeBase64String(string encodedString)
{
    var encodedStringWithoutTrailingCharacter = encodedString.Substring(0, encodedString.Length - 1);
    var encodedBytes = Microsoft.AspNetCore.WebUtilities.WebEncoders.Base64UrlDecode(encodedStringWithoutTrailingCharacter);
    return HttpUtility.UrlDecode(encodedBytes, Encoding.UTF8);
}
person Abe    schedule 05.10.2018

Я просто хотел добавить, что вы также можете отменить выбор параметра индексатора поиска Azure «Base-64 Encode Keys».

ПРИМЕЧАНИЕ. Делайте это только для полей без символов, которые Azure считает недопустимыми для ключей документа.

введите описание изображения здесь

person Tracy    schedule 01.03.2019