.net-core - 剃须刀页面上基于策略的授权
问题描述
我试图在 Core2.1 的剃须刀页面上设置基于策略的授权。
我已经设置了策略并使用授权属性装饰了剃须刀页面。我不知道我做错了什么或者是否需要做其他事情,但我无法获得授权页面。它总是给我
未找到该网址的网页:
localhost/ADENETCore/Account/AccessDenied?ReturnUrl=%2FADENETCore%2FContact
你能指出我正确的方向吗?
配置服务:
services.AddAuthorization(options =>
{
options.AddPolicy("AtLeast21", policy =>
policy.Requirements.Add(new MinimumAgeRequirement(21)));
});
services.AddMvc().AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact", "AtLeast21"); // with policy
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddSessionStateTempDataProvider();
配置:
app.UseAuthentication();
app.UseMvc();
政策要求:
public class MinimumAgeRequirement : IAuthorizationRequirement
{
public int MinimumAge { get; private set; }
public MinimumAgeRequirement(int minimumAge)
{
MinimumAge = minimumAge;
}
}
策略处理程序:
public class MinimumAgeHandler : AuthorizationHandler<MinimumAgeRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
MinimumAgeRequirement requirement)
{
context.Succeed(requirement);
return Task.CompletedTask;
}
}
剃刀页面:
[Authorize(Policy = "AtLeast21")]
public class ContactModel : PageModel
它正在重定向到Account/AccessDenied
页面
解决方案
您需要将授权处理程序添加为单例。
services.AddSingleton<IAuthorizationHandler, MinimumAgeHandler>();
推荐阅读
- c++ - Android Studio 3.2:cmake message() 输出显示在哪里?
- unit-testing - this.$el 的模拟数据,用于单位 this 与业力
- c# - AspNetCore 集成测试多个 WebApplicationFactory 实例?
- javascript - 对象内部的javascript承诺
- laravel - Laravel syncWithoutDetaching 和附加数据
- flutter - 图片不在圈内头像
- gitlab - 如何在 git lab CI/CD yaml 文件中创建 mysql 数据库?
- c# - 通过查询字符串传递 Int 类型值
- javascript - 页面在使用主干 js 提交表单时重新加载
- javascript - 通过函数向变量添加值