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