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