我想创建一个自定义授权属性来检查角色和url路径。
我已经找到了在ASP.NET内核中使用基于策略的授权的方法,但是我已经尝试实现它,但是我不能用传入的url获得HttpContext。AuthorizationHandlerContext
可能无法访问HttpContext。
我怎样才能用url路径得到当前的HttpContext?有没有可能这样做或者用其他方法?
我已经尝试了以下代码来创建自定义策略:
public class RoleUrlValidationHandler : AuthorizationHandler<RoleUrlValidationRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RoleUrlValidationRequirement requirement)
{
var path = //Here I need get current url path for example - /api/posts/4545411
var pathPart = path.Split('/');
var clientId = pathPart[3];
if (context.User.IsInRole(clientId))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
我想创建以下内容:
[Authorize(Policy="RoleUrlValidation")] //Get ClientId from Url and check User's roles
public class PostsController : Controller
{
public ActionResult Get()
{
}
}
2条答案
按热度按时间plicqrtu1#
策略方法是正确的。您唯一遗漏的一点是,您可以在处理程序中使用依赖注入。
您可能还必须注册
IHttpContextAccessor
,因为它在默认情况下未注册。额外位:
考虑使用
var routeData = httpContext.GetRouteData()
而不是path.Split('/')
来阅读值,以便您可以轻松地从路由读取参数值。5kgi1eie2#
试着这样做: