Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Показати більше📈 Аналітичний огляд Telegram-каналу Библиотека шарписта | C#, F#, .NET, ASP.NET
Канал Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 21 705 підписників, посідаючи 5 953 місце в категорії Технології та додатки та 30 278 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 21 705 підписників.
За останніми даними від 28 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -37, а за останні 24 години на 5, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 16.02%. Протягом перших 24 годин після публікації контент зазвичай збирає 7.85% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 3 478 переглядів. Протягом першої доби публікація в середньому набирає 1 705 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 26.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як .net, шарписта, навигация, await, string.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
Завдяки високій частоті оновлень (останні дані отримано 29 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
StackTraceHiddenAttribute помечает методы, которые не должны попадать в публичный стектрейс, при этом логика выполнения не меняется.
Пример:
public static class UserService
{
[StackTraceHidden]
private static void ValidateName(string name)
{
if (string.IsNullOrWhiteSpace(name))
throw new ArgumentException("Name cannot be empty");
}
public static void CreateUser(string name)
{
ValidateName(name);
Console.WriteLine("Created user " + name);
}
}
В этом примере при исключении из ValidateName в стектрейсе вы увидите только вызов UserService.CreateUser. Валидационный хелпер скрыт атрибутом, поэтому внешний разработчик не видит внутренний слой проверки.
🐸Библиотека шарписта
#sharp_viewif (!ModelState.IsValid) return BadRequest(). Скучно копипастить одно и то же. А если контроллеры станут реально чистыми — только маршрутизация и вызов сервиса?
[ApiController] автоматически подключает механизм валидации. Он ищет в DI IValidator<T> для ваших DTO/команд и запускает их до входа в метод контроллера.
FluentValidation делает так, что все ваши AbstractValidator<T> автоматически регистрируются как IValidator<T>.
Настройка за 5 секунд:
// Program.cs
builder.Services.AddControllers()
.AddJsonOptions(o => o.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase);
builder.Services.AddValidatorsFromAssembly(typeof(CreateUserValidator).Assembly);
Теперь все ваши AbstractValidator<T> автоматически работают.
Вот так пишется валидатор:
public class CreateUserValidator : AbstractValidator<CreateUserCommand>
{
public CreateUserValidator()
{
RuleFor(x => x.Email).NotEmpty().EmailAddress().MaximumLength(256);
RuleFor(x => x.DisplayName).NotEmpty().MaximumLength(100);
RuleFor(x => x.Password).NotEmpty().MinimumLength(8);
}
}
Итоговый эндпоинт:
[ApiController]
[Route("users")]
public class UsersController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Create(CreateUserCommand cmd)
{
var user = await _mediator.Send(cmd);
return CreatedAtAction(nameof(Get), new { id = user.Id }, user);
}
}
Один раз настроили — наслаждаетесь чистотой контроллеров и валидацией.
🐸Библиотека шарписта
#il_люминаторdotnet format в CI удобно как «стоп кран» по стилю кода. В пайплайн достаточно добавить один шаг:
- name: Format run: dotnet tool restore && dotnet format --verify-no-changesЗачем так делать dotnet format читает правила из
.editorconfig и проверяет что код им соответствует. Ключ --verify-no-changes сообщает утилите работать в режиме проверки без правок файлов и выйти с ненулевым кодом если что то нужно переформатировать.
В результате билд в CI падает если кто то закоммитил неотформатированный код.
🔹 Математика для разработки AI-моделей
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸Библиотека шарписта
#sharp_viewCloudmersive.APIClient.NET.Spam.
После установки достаточно прописать ключ API и создать экземпляр клиента:
using Cloudmersive.APIClient.NET.Spam.Client;
using Cloudmersive.APIClient.NET.Spam.Api;
using Cloudmersive.APIClient.NET.Spam.Model;
public class SpamChecker
{
private readonly SpamDetectionApi _api;
public SpamChecker(string apiKey)
{
// глобальная конфигурация
Configuration.Default.AddApiKey("Apikey", apiKey);
_api = new SpamDetectionApi();
}
}
Базовый сценарий — проверить строку и понять спам это или нет. API предоставляет метод для AI проверки текста и возвращает набор флагов:
public async Task<bool> IsSpamAsync(string text)
{
var request = new SpamDetectionAdvancedRequest
{
InputString = text,
Model = "Advanced",
// политика что считаем допустимым
AllowUnsolicitedSales = false,
AllowPromotionalContent = false,
AllowPhishing = false
};
SpamDetectionAdvancedResponse resp =
await _api.SpamDetectionAdvancedAsync(request);
// если сервис считает текст спамом реагируем
return resp.ContainsSpam ||
resp.ContainsUnsolicitedSales ||
resp.ContainsPhishingAttempt;
}
Ответ модели позволяет различать продажные сообщения промо контент и фишинг а не только спам не спам.
➡️ Документация
🔹 Практический интенсив «Архитектуры и шаблоны проектирования»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸Библиотека шарписта
#sharp_view// serialize output before change, compare after change
var before = JsonSerializer.Serialize(await RunOld());
var after = JsonSerializer.Serialize(await RunNew());
Assert.Equal(before, after);
Главное — позаботиться о детерминизме: вычистить случайные поля: время или GUID’ы, иначе стандарт будет шуметь и тест станет бесполезным.
🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸Библиотека шарписта
#il_люминаторbuilder.Services.AddRateLimiter(o =>
{
o.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(ctx =>
RateLimitPartition.GetFixedWindowLimiter("global", _ =>
new FixedWindowRateLimiterOptions
{
PermitLimit = 100,
Window = TimeSpan.FromSeconds(1)
}));
});
app.UseRateLimiter();
Если за текущую секунду лимит исчерпан, новые запросы начнут получать ответ об ограничении, пока не откроется следующее окно.
Дальше от этого базового варианта легко прийти к более тонким настройкам: отдельные лимиты на публичные и внутренние маршруты, разделение по API-ключу, IP или пользователю, своя политика ответа и логирование с метриками.
🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸Библиотека шарписта
#sharp_viewbuilder.Services.AddOptions<AppOptions>()
.BindConfiguration("App")
.ValidateDataAnnotations() // Валидация по атрибутам из System.ComponentModel.DataAnnotations
.Validate(o => Uri.IsWellFormedUriString(o.ApiBaseUrl, UriKind.Absolute),
"ApiBaseUrl must be absolute") // Дополнительная кастомная проверка
.ValidateOnStart(); // Проверка при старте приложения
Что здесь происходит:
• Конфигурация из секции App автоматически связывается с классом AppOptions.
• Включена проверка на основе Data Annotations — атрибуты вроде [Required], [Range] в AppOptions валидируются автоматически.
• Добавлена кастомная валидация, которая гарантирует, что значение ApiBaseUrl — корректный абсолютный URI.
• ValidateOnStart() заставляет приложение валидировать настройки сразу при запуске, а не при первом использовании.
🔹 Специалист по ИИ
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸Библиотека шарписта
#sharp_view