【发布时间】:2019-10-25 20:50:51
【问题描述】:
我有一个有效的 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 中传递它,或者至少我没有看到如何传递。
任何想法/提示将不胜感激。
【问题讨论】:
标签: c# asp.net-core .net-core