TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.78K subscribers
Post #1182 1.41K
День девятьсот шестьдесят четвёртый. #TipsAndTricks
Уменьшаем Длину GUID в URL и Json
GUID обычно используются в качестве ключа в базе данных. Если вы хотите создать URL-адрес для определённой записи, вы можете использовать GUID в нём. Но как отобразить GUID в URL-адресе? Есть несколько вариантов:
1. Guid.ToString() – 36 символов
00000000-0000-0000-0000-000000000000

2. Guid.ToString("N") – 32
00000000000000000000000000000000
Уберёт лишние символы, но всё равно результат довольно длинный.

3. Convert.ToBase64String – 24
0000000000000000000000==
Кодировка base64 небезопасна для URL-адресов, поскольку может содержать символ /. Это означает, что вам нужно закодировать значение с помощью Uri.EscapeDataString. Кроме того, в конце строки есть символы-заполнители.

4. WebEncoders.Base64UrlEncode - 22
0000000000000000000000
Этот метод преобразует массив байтов в строку base64, которую можно безопасно использовать в URL-адресе.

Вот пример кода для добавления кодирования и декодирования GUID в качестве безопасной строки URL-адреса base64:
using Microsoft.AspNetCore.WebUtilities;
…
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));

Привязка модели ASP.NET Core
Чтобы легко использовать короткие идентификаторы GUID в приложении ASP.NET Core, вы можете создать структуру для обёртывания идентификатора GUID:
public readonly struct ShortGuid
{
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);
}
}

Также потребуется определить конвертеры, которые будут использоваться связывателем модели ASP.NET Core и сериализатором JSON. Полный код структуры в источнике по ссылке ниже.

Источник: https://www.meziantou.net/reducing-the-string-length-of-guids-in-urls.htm
More from @netdeveloperdiary
  1. Oct 16, 2026День 2816. #Карьера #AI Станет ли ИИ-Кодинг Концом Программирования для Людей? Автор ориги…
  2. Oct 15, 2026Post #3374
  3. Oct 14, 2026Post #3373
  4. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  5. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  6. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →