У меня есть работающий проект 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 или, по крайней мере, я не вижу, как это сделать.
Любые идеи / советы будут высоко оценены.