C# (C Sharp) programming
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
Больше📈 Аналитический обзор Telegram-канала C# (C Sharp) programming
Канал C# (C Sharp) programming (@csharp_ci) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 18 066 подписчиков, занимая 7 202 место в категории Технологии и приложения и 36 422 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 18 066 подписчиков.
Согласно последним данным от 25 октября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -28, а за последние 24 часа — -4, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 19.39%. В первые 24 часа после публикации контент обычно набирает 8.27% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 3 504 просмотров. В течение первых суток публикация набирает 1 494 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 0.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как .net, api, логика, архитектура, string.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
Благодаря высокой частоте обновлений (последние данные получены 26 октября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
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: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-dotnetHttpClient в .NET
HttpClient отлично подходит для HTTP-запросов, но при неправильном использовании можно столкнуться с проблемами вроде исчерпания сокетов и некорректного обновления DNS. Плюс сериализацию и разбор ответов часто приходится писать вручную.
Refit упрощает это:
- описываешь REST API обычным C#-интерфейсом
- получаешь type-safe клиент
- сериализация и десериализация выполняются автоматически
- под капотом всё равно используется HttpClient
Удобно для проектов, где много внешних API и не хочется писать повторяющийся HTTP-код.
https://github.com/reactiveui/refitappsettings.json, environment variables, User Secrets и других configuration providers.
Можно читать их напрямую через IConfiguration, но такой код быстро становится хрупким и неудобным.
Вместо этого лучше использовать Options Pattern:
* создать класс настроек
* привязать его к секции конфигурации
* получать через IOptions<T>
* добавить валидацию через Data Annotations
Так конфигурация становится типизированной, проще тестируется и меньше ломается при рефакторинге.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
var user = await pipeline.ExecuteAsync(
async token => await httpClient.GetAsync("api/users", token)
);
Чистый код, единая стратегия обработки ошибок и меньше боли при росте микросервисов.
Если пишете на C# и строите production-системы — Resilience Pipelines стоит добавить в свой toolbox. ⚙️
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'ов, защиты от простых ботов или как дополнительный слой защиты.