Уменьшаем Длину GUID в URL и Json
GUID обычно используются в качестве ключа в базе данных. Если вы хотите создать URL-адрес для определённой записи, вы можете использовать GUID в нём. Но как отобразить GUID в URL-адресе? Есть несколько вариантов:
1.
Guid.ToString() – 36 символов00000000-0000-0000-0000-0000000000002.
Guid.ToString("N") – 3200000000000000000000000000000000Уберёт лишние символы, но всё равно результат довольно длинный.
3.
Convert.ToBase64String – 240000000000000000000000==Кодировка base64 небезопасна для URL-адресов, поскольку может содержать символ
/. Это означает, что вам нужно закодировать значение с помощью Uri.EscapeDataString. Кроме того, в конце строки есть символы-заполнители.4.
WebEncoders.Base64UrlEncode - 220000000000000000000000Этот метод преобразует массив байтов в строку base64, которую можно безопасно использовать в URL-адресе.
Вот пример кода для добавления кодирования и декодирования GUID в качестве безопасной строки URL-адреса base64:
using Microsoft.AspNetCore.WebUtilities;Привязка модели ASP.NET Core
…
string EncodeGuid(Guid guid)
{
Span<byte> bytes = stackalloc byte[16];
guid.TryWriteBytes(bytes);
return WebEncoders.Base64UrlEncode(bytes);
}
…
Guid DecodeGuid(string guid) =>
return new Guid(WebEncoders.Base64UrlDecode(str));
Чтобы легко использовать короткие идентификаторы GUID в приложении ASP.NET Core, вы можете создать структуру для обёртывания идентификатора GUID:
public readonly struct ShortGuidТакже потребуется определить конвертеры, которые будут использоваться связывателем модели ASP.NET Core и сериализатором JSON. Полный код структуры в источнике по ссылке ниже.
{
private readonly Guid _value;
public ShortGuid(Guid value) =>
_value = value;
public static implicit operator
Guid(ShortGuid sGuid) => sGuid._value;
public static implicit operator
ShortGuid(Guid guid) => new(guid);
public static ShortGuid Parse(string input) =>
new Guid(WebEncoders.Base64UrlDecode(input));
public override string ToString()
{
Span<byte> bytes = stackalloc byte[16];
_value.TryWriteBytes(bytes);
return WebEncoders.Base64UrlEncode(bytes);
}
}
Источник: https://www.meziantou.net/reducing-the-string-length-of-guids-in-urls.htm