命名为:'Admin'没有找到

本文关键字:命名为 Admin | 更新日期: 2023-09-27 18:17:31

我正在学习。net Core MVC中的身份验证/授权。

我正在尝试创建一个只能由'Admin'访问的控制器,但得到以下错误。

处理请求时发生未处理的异常。

InvalidOperationException: The AuthorizationPolicy named: 'Admin' was没有找到。

这是我的代码。我该怎么办?

[HttpGet("~/Test")]
[Authorize("Admin")]
public async Task<string> MyMethod()
{
    return await Task<string>.Run(() => "Hello Admin");
}

命名为:'Admin'没有找到

根据这里的文档,您没有正确地添加Authorization属性。这是正确的做法。

[HttpGet("~/Test")]
[Authorize(Roles ="Admin")]
public async Task<string> MyMethod()
{
    return await Task<string>.Run(() => "Hello Admin");
}

你可以在Startup.cs

中定义匹配策略
services.AddAuthorization(options =>
  {
        options.AddPolicy("Admin",
            authBuilder =>
            {
                authBuilder.RequireRole("Administrators");
            });
 });

authBuilder上有其他方法,你可以使用基于策略的授权要求声明或特定的用户名或自定义规则,并在启动时从中心位置控制规则https://docs.asp.net/en/latest/security/authorization/policies.html

如果您正在使用基于方案的身份验证,那么您可以通过带有授权过滤器的"AuthenticationSchemes "

例如[Authorize(AuthenticationSchemes = "UserBasicAuth")]

在这里,你的Startup.cs类应该看起来像:AddScheme<AuthenticationSchemeOptions,>("UserBasicAuth", null)

代替 [Authorize(Policy = "UserBasicAuth")]