У мене працює проект netcore 2.2, де я реалізував власну політику, яка перевіряє наявність ключів API.
У startup.cs я додаю цю політику, як це
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
У своєму AppKeyRequirement я успадковую від AuthorizationHandler і вирішую ключі в таких запитах, як це
protected override Task HandleRequirementAsync(AuthorizationHandlerContext authContext, AppKeyRequirement requirement)
{
var authorizationFilterContext = (AuthorizationFilterContext)authContext.Resource;
var query = authorizationFilterContext.HttpContext.Request.Query;
if (query.ContainsKey("key") && query.ContainsKey("app"))
{ // Do stuff
Це не працює в netcore 3.1
Я отримую таку помилку:
Неможливо надати об’єкт типу "Microsoft.AspNetCore.Routing.RouteEndpoint", щоб ввести "Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext".
Який правильний спосіб зробити це в ядрі 3 і вище?
Як вказував Кірк Ларкін, правильний шлях у .net 3.0 і вище - ввести IHttpContextAccessor в обробник Auth і використовувати це.
Моє питання на даний момент полягає в тому, як я ввожу це? Я не можу пропустити це в startup.cs або, принаймні, не бачу як.
Будь-які ідеї / підказки будуть дуже вдячні.