Код: Выделить всё
[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.AddControllersWithViews(options =>
{
options.Filters.Add();
});
< /code>
Проект компилируется, но когда я пытаюсь прочитать API, я получаю эту ошибку: < /p>
system.invalidoperationexception: никакой службы для типа 'myproject.attributes.validateapikeyattribt' не было зарегистрировано. Microsoft.extensions.dependencyInction.serviceProviderServiceExtensions.getRequiredService (поставщик iServiceProvider, тип ServiceType)
at microsoft.aspnetcore.mvc.servicefilterattribut.createinstance (iservortprovider.mvc.servicefilterattribute.createinStance (iserVICEPROVIDER). Microsoft.aspnetcore.mvc.filters.defaultfilterprovider.providefilter (context filterProviderContext, FilterItem)
at microsoft.aspnetcore.mvc.filters.defaultfilterprovider.onprovidersexecuting (filterprovidectextectext.> Microsoft.aspnetcore.mvc.filters.filterfactory.createuncachedfilterscore (ifilterprovider [] FilterPiders, ActionContext ActionContext, List`1 FilterItems)
at microsoft.aspnetcore.mvc.filterfactory.getalterfiltersIder. ActionContext actionContext)
at microsoft.aspnetcore.mvc.infrastructure.controlleractionInvokerCache.getCachedResult (controlerContext controlerContext)
at Microsoft.aspnetcore.mvc.routing.controllerrequestdelegatefactory. C__displayclass12_0.b__0 (контекст httpcontext)
at microsoft.aspnetcore.authorization.authorizationmiddleware.invoke (httpcontextextext. Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
at Microsoft.aspnetcore.authentication.authenticationmiddleware.invoke (контекст httpcontext)
at microsoft.aspnetcore.diagnostics.developerexceptionpagemiddle.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ementation
Мобильная версия