C# (C Sharp) programming
18.1K subscribers
978 photos
51 videos
8 files
779 links
По всем вопросам- @notxxx1

Реестр РКН: https://clck.ru/3Fk3kb

#VRHSZ
Download Telegram
⚡️Актуальные темы .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

Купить билет
Как ограничить количество запросов к 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'ов, защиты от простых ботов или как дополнительный слой защиты.
🚀 .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. ⚙️
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Как упростить работу с иерархическими данными в 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
ASP .NET Core API под нагрузкой: как сделать сервис устойчивым к сбоям и росту трафика

Пока пользователей мало, API работает быстро. С ростом нагрузки запросы занимают все ресурсы, повторные обращения увеличивают нагрузку, операции продолжаются после отключения клиента, ошибки во внешних сервисах ведут к каскадным отказам.

На открытом уроке 3 сентября в 20:00 разберём защиту API. Возьмём сервис с проблемами, проведём нагрузочное тестирование, найдём узкие места и поэтапно внедрим механизмы защиты. Сравним результаты после каждого изменения. Поговорим о Rate Limiting, контроле параллельных запросов, CancellationToken, Timeout, Circuit Breaker, кешировании в Redis и предотвращении перегрузки повторными попытками.

Урок для C#-разработчиков Web API, backend-инженеров с растущей нагрузкой и всех, кто хочет перейти к production-практикам.

👉 Записаться: https://tglink.io/7fc850528143e7?erid=2W5zFGannvu
#реклама
О рекламодателе
⚡️ Как нормально работать с конфигурацией в .NET

Значения могут приходить из appsettings.json, environment variables, User Secrets и других configuration providers.

Можно читать их напрямую через IConfiguration, но такой код быстро становится хрупким и неудобным.

Вместо этого лучше использовать Options Pattern:

* создать класс настроек
* привязать его к секции конфигурации
* получать через IOptions<T>
* добавить валидацию через Data Annotations

Так конфигурация становится типизированной, проще тестируется и меньше ломается при рефакторинге.
ХОЧЕШЬ ПОВЫСИТЬ ГРЕЙД В 2026 ГОДУ? 🚀

Чтобы стать Senior C# разработчиком сегодня, нужно не только знать язык программирования и фреймворки. Нужно уметь строить гибкую архитектуру приложения, которую легко тестировать и менять под задачи бизнеса. Стань экспертом в построении гибкой архитектуры приложения!

👉 Стартуем 7 сентября.

Курс ведет действующий архитектор и Principal Engineer Кирилл Ветчинкин.

Ты научишься:
Разбивать приложение на слои в соответствии с Clean Architecture
Формировать Domain Model и применять тактические паттерны DDD
Реализовывать Use Case как Command/Query
Делать синхронные и асинхронные интеграции, не загрязняя ядро приложения
Писать 3 вида тестов для разных слоев приложения

Полная программа ТУТ 👉 https://microarch.ru/courses/ddd/languages/csharp?utm_source=posev&utm_medium=erid:2Vtzqw4xuPH&utm_campaign=2

А главное — ты с нуля разработаешь и запустишь микросервис, который максимально приближен к реальности "Диспетчеризация заказов на курьеров". Это будет крутым проектом в портфолио или основой для рабочих задач.

А еще:
Проверим все домашки
Поддержим в чате
Проведем живые разборы
Ответим на все вопросы

📕 Сертификат об участии по итогам прохождения курса.

🔥 Не откладывай свой рост на потом: https://microarch.ru/courses/ddd/languages/csharp?utm_source=posev&utm_medium=erid:2Vtzqw4xuPH&utm_campaign=2

Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2Vtzqw4xuPH
🚀 Microsoft показала, как переносить старые приложения с .NET Framework на .NET 10 прямо в Visual Studio с помощью GitHub Copilot.

Copilot теперь помогает пройти модернизацию по шагам:

- анализирует старый проект
- составляет план обновления
- показывает контрольные точки перед изменениями
- помогает переписывать несовместимые части
- сохраняет ход миграции в Markdown-файлах
- делает процесс прозрачнее и проще для проверки командой

Идея в том, чтобы превратить большой и рискованный апгрейд в последовательный сценарий, где разработчик видит, что именно меняется и почему.

Полезно для команд, которые годами откладывали переход со старого .NET Framework из-за объёма ручной работы.

https://devblogs.microsoft.com/visualstudio/today-i-will-modernize-a-net-application/
🧩 Как собрать Excel-подобную таблицу в .NET MAUI через Blazor Hybrid

В статье показывают, как встроить полноценный spreadsheet-интерфейс в .NET MAUI-приложение с помощью Blazor Hybrid.

Что получается:

- таблица в стиле Excel
- редактирование ячеек
- формулы и вычисления
- форматирование
- работа с листами
- импорт и экспорт Excel-файлов
- запуск в desktop/mobile-приложении на .NET MAUI

Полезный пример для тех, кто хочет сделать внутри своего приложения редактор таблиц без разработки всего интерфейса с нуля.

https://syncfusion.com/blogs/post/blazor-spreadsheet-dotnet-maui
Please open Telegram to view this post
VIEW IN TELEGRAM
Refit - удобная альтернатива ручной работе с HttpClient в .NET

HttpClient отлично подходит для HTTP-запросов, но при неправильном использовании можно столкнуться с проблемами вроде исчерпания сокетов и некорректного обновления DNS. Плюс сериализацию и разбор ответов часто приходится писать вручную.

Refit упрощает это:

- описываешь REST API обычным C#-интерфейсом
- получаешь type-safe клиент
- сериализация и десериализация выполняются автоматически
- под капотом всё равно используется HttpClient

Удобно для проектов, где много внешних API и не хочется писать повторяющийся HTTP-код.

https://github.com/reactiveui/refit
✔️ Polly становится платной, но у .NET остаётся бесплатная альтернатива

Polly много лет была одной из главных библиотек .NET для устойчивости к временным сбоям: retry, timeout, fallback, rate limiting и circuit breaker.

Теперь Polly движется в сторону платной модели, но Microsoft.Resilience по-прежнему можно использовать бесплатно.

С .NET 8 работа с resilience стала заметно проще: появился новый API Polly и официальные библиотеки Microsoft для построения resilience pipelines.

Что можно настроить:

- Retry
- Fallback
- Timeout
- Rate limiting
- Circuit breaker

Хороший разбор того, как собирать устойчивые cloud-приложения на современном .NET:

https://milanjovanovic.tech/blog/building-resilient-cloud-applications-with-dotnet
Please open Telegram to view this post
VIEW IN TELEGRAM
.NET и Владимир: отличный повод совместить митап и выходные в городе с историей

Офлайн-мероприятий для .NET-разработчиков сейчас не так много, а тут получается приятное комбо: встреча с другими разработчиками вечером в пятницу и возможность остаться на выходные в городе с историей.

В программе доклады от разработчиков Altenar и Рови Тех (часть Т-Банка):
— Async/await — асинхронность, которую можно читать.
— Как не терять данные при асинхронной интеграции программных систем.
— EF Core + PostgreSQL: за рамками CRUD.


Кстати, ещё на митапе запланированы активности для программистов: адаптации известных игр ("Сапер", "Крестики-нолики", "Гонки"), где для победы понадобится понимание математики и вероятностей.

Участие бесплатное, а ещё можно сэкономить на проезде — организаторы разыграют несколько билетов на "Ласточку" среди участников.

Для участия в розыгрыше:
1. Зарегистрируйтесь на митап.
2. Напишите «Хочу на .NET-митап на Ласточке» на почту aleksei.korneev@altenar.com с почты, указанной при регистрации.

Итоги розыгрыша подведём 14 сентября.


Регистрируйтесь, планируйте поездку и до встречи во Владимире!
Запускать локальные LLM в .NET стало удивительно просто

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

Через Microsoft.Extensions.AI и Ollama локальную модель можно подключить буквально несколькими строками.

Что можно собрать:

- обычный чат
- суммаризацию текста
- классификацию и категоризацию
- распознавание изображений
- свои AI-фичи без отправки данных во внешний API

Особенно интересно, что всё это можно запускать локально: модель работает на вашей машине, а приложение обращается к ней как к обычному сервису.

Примерно так:


builder.Services.AddChatClient(
new OllamaApiClient(
new Uri("http://localhost:11434"),
"phi3:mini"));


Дальше получаем IChatClient и используем его внутри обычного .NET-приложения.

Хороший разбор того, как работать с LLM в .NET через Microsoft.Extensions.AI:
RabbitMQ в Production: Transactional Outbox, идемпотентность и DLQ в ASP.NET Core

Отправить сообщение в RabbitMQ несложно. Гораздо сложнее сделать так, чтобы система продолжала работать корректно в production: сообщения не терялись, не обрабатывались повторно, а ошибки не приводили к бесконечным ретраям и дублированию данных.

На открытом уроке 17 сентября в 20:00 разберем типичные проблемы при построении событийно-ориентированных систем и рассмотрим проверенные подходы к их решению. Поговорим о паттерне Transactional Outbox, идемпотентности, и покажем, как Dead Letter Queue (DLQ) помогает работать с ошибками. Примеры на ASP.NET Core и RabbitMQ, но подходы применимы и к другим брокерам.

Урок для backend-разработчиков, строящих микросервисные архитектуры, и инженеров, желающих довести event-driven системы до промышленной надежности.

👉 Записаться: https://otus.pw/WXVc1/?erid=2W5zFHyvc6m

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.