如何创建自定义授权属性以检查Asp.Net Core中的角色和URL路径?
发布时间:2020-12-16 07:11:05 所属栏目:asp.Net 来源:网络整理
导读:我想创建一个自定义授权属性来检查角色和网址路径. 我已经找到了使用基于策略的授权在Asp.Net Core中执行此操作的方法,但我已经尝试实现它,但是我无法使用inclming url获取HttpContext. AuthorizationHandlerContext无法访问HttpContext. 如何通过url路径获
我想创建一个自定义授权属性来检查角色和网址路径.
我已经找到了使用基于策略的授权在Asp.Net Core中执行此操作的方法,但我已经尝试实现它,但是我无法使用inclming 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() { } } 解决方法
政策方针是正确的.只有你错过的是,你可以在处理程序中使用依赖注入.
public class RoleUrlValidationHandler : AuthorizationHandler<RoleUrlValidationRequirement> { private readonly IHttpContextAccessor contextAccessor; public class RoleUrlValidationHandler(IHttpContextAccessor contextAccessor) { this.contextAccessor = contextAccessor; } protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,RoleUrlValidationRequirement requirement) { var httpContext = contextAccessor.HttpContext; var path = httpContext.Request.Path; var pathPart = path.Split('/'); var clientId = pathPart[3]; if (context.User.IsInRole(clientId)) { context.Succeed(requirement); } return Task.CompletedTask; } } 您也可能必须注册IHttpContextAccessor,因为它默认情况下未注册. services.AddSingleton<IHttpContextAccessor,HttpContextAccessor>(); 额外位: 考虑使用var routeData = httpContext.GetRouteData()而不是使用path.Split(‘/’)从中读取值,以便您可以轻松地从路径中读取参数值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-identity – 在调用SignIn后,可以通过OWIN修改ASP.
- ASP.NET C#,需要按两次按钮才能发生一些事情
- asp.net-mvc-4 – 重定向到动作,参数在mvc中始终为空
- 在ASP.Net中使用Page_Load和Page_PreRender
- asp.net-mvc – Mvc – 在会话中存储列表,然后检索其值
- asp.net – Page.IsValid如何工作?
- asp.net-mvc – 帮助/提示提高我的ASP.NET MVC 2网站的性能
- ASP.NET 5 MVC6自定义CSS和Javascript放置约定
- asp.net – URL重写 – web.config错误
- asp.net – 当DataList为空时需要显示消息
推荐文章
站长推荐
- asp.net MVC解决方案/项目布局
- dependency-injection – 从ILogger访问当前的Ht
- 两个ASP.NET站点共享应用程序文件但具有不同的we
- asp.net-web-api – 错误请求 – 无效的URL web
- asp.net-mvc – ASP.Net MVC4根cshtml和“不继承
- asp.net-web-api – ASP.net 5中的IApplicationB
- asp.net-mvc-3 – 使用Html.RadioButtonFor和Htm
- asp.net-mvc – 从Html.RouteLink生成绝对URL
- ASP.NET批量下载文件的方法
- .net – SqlDataSource与ObjectDataSource
热点阅读