我有一个正在运行的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及更高版本中执行此操作的正确方法是什么?
正如Kirk Larkin指出的那样,.net 3.0及更高版本中的正确方法是将IHttpContextAccessor注入到Auth处理程序中并使用它。
我现在的问题是如何注射呢?我无法在startup.cs中传递它,或者至少我不知道如何。
任何想法/提示将不胜感激。