⚡️ URL shortener за <100 строк на .NET - реально

Идея простая: у тебя есть входной URL -> генеришь короткий код -> сохраняешь в БД -> по коду делаешь редирект.

Что нужно собрать

- Генератор уникального кода
Делай base62 (0-9, a-z, A-Z) длиной 6-8 символов.
Главное - гарантировать уникальность:
- либо проверка в БД и повтор генерации при коллизии
- либо уникальный индекс по Code и ретрай при ошибке сохранения

- База данных
Таблица ShortenedUrl:
- Id (Guid)
- LongUrl (string)
- Code (string, unique)
- CreatedOnUtc (DateTime)
Опционально:
- ExpiresOnUtc
- Clicks
- CreatedByIp

- 2 эндпоинта (Minimal API)
- POST /shorten
- валидируешь URL (Uri.TryCreate)
- генеришь code
- формируешь shortUrl из scheme + host + code
- сохраняешь в БД
- возвращаешь shortUrl
- GET /{code}
- ищешь code в БД
- если нет - 404
- если есть - Results.Redirect(LongUrl)

Почему чаще всего "падают" такие сервисы

- Коллизии кода -> решается unique index + retry
- Открытый редирект на мусор -> валидируй UriKind.Absolute и при желании режь опасные схемы (только http/https)
- Производительность поиска -> индекс по Code обязателен
- Правильный shortUrl за прокси -> если сервис за nginx/cloudflare, учитывай Forwarded Headers, иначе host/scheme будут неправильными

Если делать максимально чисто - генератор кода отдельным сервисом, модель + DbContext, и два эндпоинта. Это и укладывается в <100 строк.
4 36 3.5K

Обсуждение 4

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram