ActionFilterAttribute




Это очень крутая штука, которую надо знать всем C# специалистам, разрабатывающим сервисы с помощью ASP NET Core.



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



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



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



[AttributeUsage(validOn: AttributeTargets.Method)]

public class HeaderRequiredAttribute : ActionFilterAttribute

{

private readonly string _headerName;



public HeaderRequiredAttribute(string headerName) =>

_headerName = headerName;



public override void OnActionExecuting(ActionExecutingContext context)

{

var httpContext = context.HttpContext;

var headerValue = httpContext.Request.Headers[_headerName].ToString();

if (string.IsNullOrWhiteSpace(headerValue))

throw new MissingRequiredHeaderException(_headerName);

}

}