Код: Выделить всё
[AttributeUsage(validOn: AttributeTargets.Class | AttributeTargets.Method)]
public class ValidateApiKeyAttribute : Attribute, IAsyncActionFilter
{
private ILogService? _logger;
}
public ValidateApiKeyAttribute(ILogService? logger)
{
_logger = logger;
}
public async Task OnActionExecutionAsync(ActionExecutingContext context,
ActionExecutionDelegate next)
{
_logger.Info();
}
< /code>
В контроллере API, когда я метод требует аутентификации, я добавляю < /p>
[ServiceFilter(typeof(ValidateApiKeyAttribute))]
[HttpGet]
[Route("groups")]
public async Task GetGroupList()
{
return null;
}
builder.Services.AddScoped(typeof(ILogService), typeof(LogService));
builder.Services.AddControllersWithViews(options =>
{
options.Filters.Add();
});
< /code>
Проект компилируется, но когда я пытаюсь прочитать API, я получаю эту ошибку < /p>
system.invalidoperationException: никакой службы для типа
'myproject.attributes.validateAteAttribute 'не было зарегистрировано. /> microsoft.extensions.dependencyInction.serviceProviderServiceExtensions.getRequiredService(IserviceProvider
Provider, Type ServiceType) at
microsoft.aspnetcore.mvc.servicefilterattribute.createinstans. /> microsoft.aspnetcore.mvc.filters.defaultfilterprovider.providefilter(filterProviderContext
Context, FilterItem filterItem) at
microsoft.aspnetcore.mvc.filters.filterfactory.createuncachedfilterscore(ifilterprovider=br /> filterProviders, ActionContext ActionContext, List`1 FilterItems)
at
Microsoft.AspNetCore.Mvc.Filters.FilterFactory.GetAllFilters(IFilterProvider[]
filterProviders, ActionContext actionContext) at
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvokerCache.GetCachedResult(ControllerContext
controllerContext) at
microsoft.aspnetcore.mvc.routing.controllerRequestdelegatefactory.c__displayclass12_0.b__0(httpcontext
context) at
microsoft.aspnetcore.authorization.authorizationmiddleware.invoke. /> swashbuckle.aspnetcore.swaggerui.swaggeruimiddleware.invoke(httpcontext
httpcontext) по адресу
swashbuckle.aspnetcore.swagger.swaggermiddleware.invoke(httpcontext
httpcontext, iswgerpuger. /> microsoft.aspnetcore.authentication.authenticationmiddleware.invoke(httpcontext
context) at
microsoft.aspnetcore.diagnostics.developerexeprexpresspagemiddle.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ementation
Мобильная версия