如何向 ASP.NET Core 6 MVC 添加全局授权属性?

voy*_*861 9 asp.net-authorization asp.net-core-mvc .net-6.0

我想将[Authorize]数据属性设置为应用程序而不是控制器

[Authorize]
public class CustomerController : Controller {}
Run Code Online (Sandbox Code Playgroud)

这样[Authorize]我就可以仅为该控制器设置授权;我想为每个控制器设置它。

到目前为止,我在program.cs课堂上尝试过这些......

var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();

services.AddMvc(config =>
{
    config.Filters.Add(new AuthorizeFilter(policy));
});
Run Code Online (Sandbox Code Playgroud)

两者都不起作用 - 它构建了应用程序,但在浏览器上它无法访问网站。那么如何在 .NET 6 中全局设置此属性?

builder.services.AddMvc(options => options.Filters.add(new AuthorizeAttribute));
Run Code Online (Sandbox Code Playgroud)

这会引发错误

无法解析方法“Add(Microsoft.AspNetCore.Authorization.AuthorizeAttribute)”

Dig*_*Dan 15

在 ASP.NET Core 6.0 中执行此操作的方法略有不同。Microsoft Docs 有一篇文章展示了执行此操作的两种方法:使用受授权保护的用户数据创建 ASP.NET Core 应用程序 - 需要经过身份验证的用户

选项 1 - 本文称之为“首选方式” - 将以下代码添加到您的Program.cs文件中:

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
});
Run Code Online (Sandbox Code Playgroud)

选项 2 - 本文展示了使用授权过滤器的替代方法:

builder.Services.AddControllers(config =>
{
    var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
    config.Filters.Add(new AuthorizeFilter(policy));
});
Run Code Online (Sandbox Code Playgroud)