C# 找不到按用户名列出的AuthorizationPolicy

C# 找不到按用户名列出的AuthorizationPolicy,c#,asp.net-core-mvc,asp.net-authorization,C#,Asp.net Core Mvc,Asp.net Authorization,我正在尝试为需要执行控制器某些操作(需要权限)的特定用户添加新的基于策略的授权。我是基于策略的授权新手,但我遵循了帖子上的所有说明,看起来很简单 在我的Startup.cs和AddMvc方法之后,我有: services.AddAuthorization(options => { options.AddPolicy("AgentsActivityReport ", policy => policy.RequireUserName("AnaR")); }); 然后,在控制器

我正在尝试为需要执行控制器某些操作(需要权限)的特定用户添加新的基于策略的授权。我是基于策略的授权新手,但我遵循了帖子上的所有说明,看起来很简单

在我的Startup.cs和AddMvc方法之后,我有:

services.AddAuthorization(options =>
{
    options.AddPolicy("AgentsActivityReport ", policy => policy.RequireUserName("AnaR"));
}); 
然后,在控制器操作中,我有:

[Authorize(Policy = "AgentsActivityReport")]
public ActionResult AgentsActivity()
{
    //some code
}
但是,启动应用程序时,我收到以下错误:

InvalidOperationException:名为的授权策略: 找不到“AgentsActivityReport”

我还阅读了其他一些帖子,如:

一切似乎都很正确。任何想法?

基于post,我能够声明并允许我的用户通过使用需求调用控制器的操作。由于我的条件必须是允许某些角色或某个名为AnaR的用户,因此我必须将该逻辑放入AuthorizationHandler.cs

Startup.cs

services.AddAuthorization(options => {
         options.AddPolicy("ReportActivityPolicy", policy =>
            {
                policy.AddRequirements(new UserNameRequirement("AnaR"));                    
            });
        });

services.AddSingleton<IAuthorizationHandler, AgentsActivityAuthorizationHandler>();

希望有帮助

您似乎在中间件中注册了一个名为AgentsActivityReport的策略,该策略的末尾有一个空格,但在没有空格AgentsActivityReport的情况下对控制器进行了注释。

配置中可能有错误,但如果没有看到,则很难判断。可能是授权被以后的注册所取代。您是否添加了两次“AddAuthorization”或其他授权功能?你能展示一下整个启动过程吗?嗨,鲁阿尔,我已经解决了这个问题,我宣布了一点不同的政策。我会在一段时间后发布我的答案。不过我很感激你的回答。谢谢
public class AgentsActivityAuthorizationHandler : AuthorizationHandler<UserNameRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, UserNameRequirement requirement)
    {
        if (context.User.IsInRole("Administrator") || context.User.IsInRole("Manager") || context.User.Identity.Name == requirement.UserName)
        {
            context.Succeed(requirement);
        }

        return Task.FromResult(0);
    }
}

public class UserNameRequirement : IAuthorizationRequirement
{
    public UserNameRequirement(string username)
    {
        this.UserName = username;
    }

    public string UserName { get; set; }
}
[Authorize(Policy = "ReportActivityPolicy")]
public ActionResult AgentsActivity()
{
    //code of your controller.
}