TGViewer
C# Short Posts 🔞 C# Short Posts 🔞 @dimasshortposts · 306 subscribers
Post #309 635
Однако тут у меня есть хотелка: желаю, чтобы при добавлении нового такого подписочного функционала я не забыл, что нужно реализовать две версии. Плюс хочется, чтобы это тоже работало как-то магически попроще, как с атрибутом.

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

Все контроллеры отвечают двумя наборами данных:


[SubscriptionFilter("Premium")]
[HttpGet("data")]
public IActionResult GetData()
{
var baseData = GetBaseData();
var premiumData = GetPremiumData();
return Ok(new { Base = baseData, Premium = premiumData });
}

На постобработке убираем лишнее после проверки подписки:


public class SubscriptionFilterAttribute : ResultFilterAttribute
{
private readonly string _requiredLevel;

public SubscriptionFilterAttribute(string requiredLevel)
{
_requiredLevel = requiredLevel;
}

public override void OnActionExecuted(ActionExecutedContext context)
{
var user = context.HttpContext.User;
if (user.HasSubscription)
{
return context.Result;
}
else
{
return new { Base = context.Result.Base };
}
}
}


Но у этого подхода есть понятный минус в том, что мы как бы делаем двойную работу, которая вообще не нужна.

Можно ещё скомбинировать подход – сделать предфильтр, который поймёт, нужно ли применять поиск по премиум-функциям, а потом постфильтр. А сам хэндлер, который всё это будет обрабатывать, обозначить IPremiumFunctionHandler, который будет заставлять реализовывать два разных варианта работы.

Поначалу я, конечно, это всё сделаю попроще на ифчиках. Но, короче, хотел поделиться, вдруг тут есть кто решал похожую проблему и знает, что да как)
  • ❤‍🔥 1
  • 👍 1
More from @dimasshortposts
  1. Sep 26, 2026🧵 Тредик для вопросов по докладу про MAF на дотнексте В докладе многие подробности опусти…
  2. Sep 23, 2026Даже самым хардкорным ребятам надо отдыхать, так что отдыхаем, мои чюваки 🕺 🧑‍💻dp🥁 #he…
  3. Sep 16, 2026🎯 Instrumented Tier0: профилирование кода В прошлый раз мы разобрали два уровня компиляци…
  4. Sep 15, 2026🔜 Готовлюсь к DOTNEXT 2026 В прошлом году за две недели до выступления я зачитывал свой д…
  5. Sep 9, 2026C# Short Posts 🔞 pinned «🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот к…
  6. Sep 9, 2026🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот канальчик, и пора бы описат…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →