Веб-API .NET 8 — служба для типа ValidateAntiforgeryTokenAuthorizationFilter не зарегистрированаC#

Место общения программистов C#
Anonymous
Веб-API .NET 8 — служба для типа ValidateAntiforgeryTokenAuthorizationFilter не зарегистрирована

Сообщение Anonymous »

У меня есть новый проект веб-API .NET 8, но я столкнулся с проблемой при попытке реализовать токены AntiForgery. В частности, у меня возникла проблема, когда я защищаю действие на своем контроллере с помощью [ValidateAntiForgeryToken].
Я не получаю ошибок сборки, и действие возвращает данные, когда я этого не делаю. Я не использую атрибут. Но с добавленным атрибутом я получаю исключение

System.InvalidOperationException: ни одна служба для типа «Microsoft.AspNetCore.Mvc.ViewFeatures.Filters.ValidateAntiforgeryTokenAuthorizationFilter» не имеет был зарегистрирован.
в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(поставщик IServiceProvider, тип serviceType)
в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](поставщик IServiceProvider)
в Microsoft.AspNetCore.Mvc.Filters.DefaultFilterProvider.ProvideFilter(контекст FilterProviderContext, FilterItem filterItem)
в Microsoft.AspNetCore.Mvc.Filters.DefaultFilterProvider.OnProvidersExecuting(контекст FilterProviderContext)
в Microsoft.AspNetCore.Mvc.Filters .FilterFactory.CreateUncachedFiltersCore(IFilterProvider[] filterProviders, ActionContext actionContext, List`1 filterItems)
в Microsoft.AspNetCore.Mvc.Filters.FilterFactory.GetAllFilters(IFilterProvider[] filterProviders, ActionContext actionContext)
в Microsoft. AspNetCore.Mvc.Infrastructure.ControllerActionInvokerCache.GetCachedResult(ControllerContext ControllerContext)
в Microsoft.AspNetCore.Mvc.Routing.ControllerRequestDelegateFactory.c__DisplayClass12_0.b__0(HttpContext context)
в Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware. InvokeCore(контекст HttpContext)
в Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(контекст HttpContext)
в Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
в Swashbuckle.AspNetCore. Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
в Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(HttpContext context)
в Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
в Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(контекст HttpContext)

Program.cs (сжатый)

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

var builder = WebApplication.CreateBuilder(args)

builder.Services.AddControllers()
builder.Services.AddAntiforgery(options =>
{
options.HeaderName = "X-XSRF-TOKEN";
options.SuppressXFrameOptionsHeader = false;
}

// ... other service registrations

var app = builder.Build();

var antiforgery = app.Services.GetRequiredService();
app.Use((context, next) =>
{
var requestPath = context.Request.Path.Value;
if (string.Equals(requestPath, "/login", StringComparison.OrdinalIgnoreCase))
{
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false });
}
});

// ... additional app usings

app.Run();
Основываясь на этом ответе, я добавил следующую опцию при добавлении контроллеров в службы, но все равно получаю ту же ошибку.

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

builder.Services.AddControllers(options =>
{
options.Filters.Add(new Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute());
});
Что мне здесь не хватает? Я перечитал документацию Microsoft и считаю, что у меня все настроено так, как показано, но, очевидно, я что-то упускаю.

Подробнее здесь: https://stackoverflow.com/questions/788 ... tionfilter

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