Я не получаю ошибок сборки, и действие возвращает данные, когда я этого не делаю. Я не использую атрибут. Но с добавленным атрибутом я получаю исключение
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());
});
Подробнее здесь: https://stackoverflow.com/questions/788 ... tionfilter