IAsyncactionFilter с использованием пользовательской реализации журналаC#

Место общения программистов C#
Ответить
Anonymous
 IAsyncactionFilter с использованием пользовательской реализации журнала

Сообщение Anonymous »

В моем проекте ASP.net Core я хочу проверить, имеет ли вызов API -интерфейса действительный токен в заголовке. Для этого я создал новый атрибут , как это

Код: Выделить всё

[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;
}
В Program.cs я добавил эти строки
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»