C
C# (C Sharp) programming
30.08.2026 11:02 · 👁 1.4K
Как упростить работу с иерархическими данными в Blazor
Обычный DropDownList удобен для плоских списков, а TreeView хорошо показывает структуру, но занимает много места.
Telerik предлагает промежуточный вариант - DropDownTree.
Он позволяет выбирать элементы из дерева прямо внутри компактного dropdown:
* категории товаров
* структура компании
* файловая система
* регионы
* роли и permissions
Компонент поддерживает вложенные данные напрямую, поиск по дереву, раскрытие нужных узлов и отображение выбранного пути.
Пример:
<TelerikDropDownTree Data="@Data"
@bind-Value="@SelectedValue"
ValueField="TreeItemId"
Filterable="true">
<DropDownTreeBindings>
<DropDownTreeBinding TextField="Text"
ItemsField="Items" />
</DropDownTreeBindings>
</TelerikDropDownTree>
Главное преимущество - не нужно превращать сложную иерархию в огромный плоский список.
Если данные уже представлены как рекурсивный DTO, их часто можно передать компоненту практически напрямую.
Полезный вариант для Blazor-приложений, где пользователь должен выбирать что-то из большого дерева данных, но постоянно держать TreeView на экране нет смысла.
https://telerik.com/blogs/simplify-hierarchical-selection-blazor-telerik-dropdowntree
#aspnetcore #blazor
C
C# (C Sharp) programming
29.08.2026 09:31 · 👁 1.6K
Microsoft выпустила августовские servicing-обновления для .NET и .NET Framework
Обновления вышли 11 августа 2026 года и включают как security, так и non-security fixes.
Актуальные версии:
- .NET 10.0.11
- .NET 9.0.19
- .NET 8.0.30
В этом месяце Microsoft закрыла сразу несколько уязвимостей в .NET 8, 9 и 10, включая:
- Remote Code Execution
- Elevation of Privilege
- Information Disclosure
- Denial of Service
- Security Feature Bypass
Среди исправлений есть CVE-2026-70354 и CVE-2026-62897, связанные с удалённым выполнением кода.
Обновлены также:
- ASP.NET Core
- Entity Framework Core
- Runtime
- container images
- Linux packages
Для .NET Framework тоже вышли новые security и non-security updates.
Если приложение работает на .NET 8, 9 или 10, августовский servicing update лучше не откладывать, особенно из-за набора security fixes.
Подробнее:
https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-august-2026-servicing-updates/
#aspnetcore #dotnet
C
C# (C Sharp) programming
28.08.2026 07:04 · 👁 1.9K
#ПятничныйКвиз #ДляСамыхМаленьких
C
C# (C Sharp) programming
26.08.2026 12:01 · 👁 2.3K
🚀 .NET 8: как сделать микросервисы устойчивыми с Resilience Pipelines + DI
В распределённых системах ошибки — это не исключение, а реальность:
❌ API временно недоступен
❌ сеть дала сбой
❌ сервис перегружен
❌ внешний провайдер отвечает слишком долго
В .NET 8 это стало намного проще благодаря Microsoft.Extensions.Resilience (на базе Polly).
Можно собрать свой ResiliencePipeline и добавить в DI один раз:
✅ Retry — повторить запрос
✅ Timeout — ограничить время ожидания
✅ Circuit Breaker — остановить поток ошибок
✅ Fallback — вернуть запасной результат
✅ Rate Limiter — защитить сервис
✅ Hedging — отправить альтернативный запрос
Главный плюс — не нужно настраивать защиту в каждом месте кода.
Создаёшь pipeline → регистрируешь через DI → используешь где нужно:
var user = await pipeline.ExecuteAsync(
async token => await httpClient.GetAsync("api/users", token)
);
Чистый код, единая стратегия обработки ошибок и меньше боли при росте микросервисов.
Если пишете на C# и строите production-системы — Resilience Pipelines стоит добавить в свой toolbox. ⚙️
C
C# (C Sharp) programming
24.08.2026 16:24 · 👁 2.4K
Как ограничить количество запросов к API по IP в ASP.NET Core
Встроенный Rate Limiter позволяет сделать это буквально в несколько строк:
builder.Services.AddRateLimiter(options =>
{
options.AddPolicy("fixed-by-ip", httpContext =>
RateLimitPartition.GetFixedWindowLimiter(
partitionKey: httpContext.Connection.RemoteIpAddress?.ToString(),
factory: _ => new FixedWindowRateLimiterOptions
{
PermitLimit = 10,
Window = TimeSpan.FromMinutes(1)
}));
});
В этом примере один IP может сделать максимум 10 запросов за минуту.
Но использовать такой подход вслепую не стоит.
Причина простая: реальные пользователи могут находиться за NAT, прокси или корпоративным шлюзом и иметь один внешний IP. В итоге лимит одного человека начнёт влиять на остальных.
Поэтому для авторизованных пользователей обычно лучше ограничивать запросы по уникальному userId.
А rate limit по IP оставлять для анонимных endpoint'ов, защиты от простых ботов или как дополнительный слой защиты.
C
C# (C Sharp) programming
24.08.2026 14:23 · 👁 1.9K
⚡️Актуальные темы .NET на DotNext 2026
В .NET одновременно происходит много интересного: C# получает новые возможности, .NET 10 меняет расклад между Native AOT и JIT, а в разработке появляются ИИ-агенты, которые берут на себя часть инженерной работы.
На DotNext 2026 разберем как вещи, которые происходят на уровне машинного кода, так и вполне прикладные вопросы архитектуры и разработки.
📅 25–26 сентября, Москва + online
Выбрали 8 тем из программы, среди которых не только доклады, но и хардкорный воркшоп, чтобы показать этот диапазон:
— как заставить Transactional Outbox одновременно быть строгим и параллельным;
— зачем ASP.NET Core модульный монолит и как собрать его без микросервисов;
— где Native AOT выигрывает у JIT в .NET 10;
— что происходит с циклами, inlining и bounds checks в C# и Go;
— как меняется SDLC, когда в команде появляются ИИ-агенты;
— что принесут discriminated unions в C# 15;
— как проектировать асинхронное взаимодействие в распределенных системах (воркшоп).
Все подробности — в карточках и на сайте конференции.
🌟По промокоду csharpci — персональные билеты дешевле
→ Программа DotNext
→ Купить билет
C
C# (C Sharp) programming
23.08.2026 12:01 · 👁 2.4K
Появился бесплатный open-source PDF-редактор для Windows, который пытается заменить Adobe Acrobat без подписки.
KillerPDF умеет редактировать текст прямо в PDF, добавлять аннотации и изображения, объединять и разделять страницы, заполнять формы, ставить подписи, печатать и делать OCR. Причём распознавание работает локально через Tesseract, без отправки документов в облако.
Есть и более редкие штуки: восстановление повреждённых PDF, открытие файлов с паролем, выравнивание кривых сканов, perspective correction, ночной режим, split view для двух документов и полноценная работа из командной строки.
Весь редактор упакован примерно в 16 МБ, может работать portable, не требует аккаунта, не собирает телеметрию и не делает phone-home. Проект распространяется под GPLv3.
На GitHub уже около 3,4 тыс. звёзд.
https://github.com/SteveTheKiller/KillerPDF
C
C# (C Sharp) programming
23.08.2026 10:01 · 👁 1.9K
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку
Окружение решает больше, чем кажется.
Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: https://t.me/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_1001_notes
Java: t.me/javatg
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: https://t.me/+S4hinvO3QI43ZjNi
Kubernetes: t.me/kubernetc
GameDev: https://t.me/gamedev
Haskell: t.me/haskell_tg
Собеседования и карьера:
DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview
Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: https://t.me/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.
C
C# (C Sharp) programming
21.08.2026 07:08 · 👁 2.6K
#ПятничныйКвиз
C
C# (C Sharp) programming
19.08.2026 12:04 · 👁 2.9K
⚙️ Service Discovery в .NET через Consul можно подключить без самописного резолва адресов и ручного перебора инстансов.
Рабочая схема выглядит так:
Install-Package Steeltoe.Discovery.Consul
Регистрируем discovery:
builder.Services
.AddServiceDiscovery(o => o.UseConsul());
В appsettings.json указываем Consul и параметры сервиса:
"Consul": {
"Host": "localhost",
"Port": 8500,
"Discovery": {
"ServiceName": "reporting-service",
"Hostname": "reporting-api",
"Port": 8080
}
}
А дальше самое полезное:
builder.Services
.AddHttpClient<ReportingServiceClient>(client =>
{
client.BaseAddress = new Uri("http://reporting-service");
})
.AddServiceDiscovery()
.AddRoundRobinLoadBalancer();
То есть HttpClient ходит не на конкретный IP:port, а на логическое имя сервиса.
Steeltoe через Consul получает живые инстансы, а RoundRobinLoadBalancer распределяет запросы между ними.
Это особенно полезно, когда сервисы часто пересоздаются, IP меняются, а хардкодить адреса уже невозможно.
По сути, клиентская часть получает простой pipeline:
service name → Consul → healthy instances → load balancing → HTTP request
Для микросервисов на .NET это намного чище, чем городить собственный discovery layer.