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

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

Сообщение Anonymous »

У меня есть новый проект веб-API ASP.NET Core 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)

в Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(контекст HttpContext)

в Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)

в 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)

в 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 ... uthorizati
Ответить

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

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

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

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

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