匿名端点重定向到安全 ASP.Net 核心 Web 应用程序中的登录屏幕

Anonymous endpoint redirects to login screen in secured ASP.Net Core web application

我有一个最近迁移到 .Net 6.0 的 ASP.Net(Blazor 服务器端)5 Web 应用程序。它有几个私有端点,我们需要添加一个新的 public 端点。如果我们浏览到新的 public 端点,系统会将我们重定向到 Azure AD B2C 登录屏幕。我的理解是在端点方法上添加一个 [AllowAnonymous] 属性应该覆盖启动配置。

我错过了什么?

Startup.cs:

public virtual void ConfigureServices(IServiceCollection services)
    {
      services.AddHttpContextAccessor();
      services.AddHttpClient();
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
          .AddMicrosoftIdentityWebApp(configuration.GetSection("AzureAdB2C"));
      services.AddAuthorization();
      services.AddControllersWithViews();
      //Required as MVC must know whether it can rely on the authorization and CORS Middleware during initialization.
      services.AddMvc(options => options.EnableEndpointRouting = false)
          .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
      #endregion

      services.AddScoped<GlobalsService>();
      services.Configure<AzureADB2C>(configuration.GetSection("AzureADB2C"));
    }

public virtual void Configure(IApplicationBuilder app, IWebHostEnvironment env,
        DataProtectionKeysContext dataProtectionKeysContext)
    {
      if (env.IsDevelopment())
      {
..........................
      }
      else
      {
        app.Use((ctx, next) =>
        {
          return next();
        });
      }
      app.UseHttpsRedirection();
      app.UseCookiePolicy();      
      app.UseRouting();
      app.UseAuthentication();
      app.UseAuthorization();      
      app.UseMvcWithDefaultRoute();//Required as MVC must know whether it can rely on the authorization and CORS Middleware during initialization.
      app.UseEndpoints(endpoints =>
      {
        endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapControllers();
        endpoints.MapBlazorHub();
        endpoints.MapFallbackToPage("/_Host");
      });
    }
  }

public api 通过 http://localhost:44300/api/GeneratePDF/get:

访问的端点
    [ApiController]
      [Route("api/[controller]")]
      [Authorize]
      public partial class GeneratePdfController : ControllerBase
      {
        public GeneratePdfController()
        {
        }
        [HttpGet(Name = "Get")]
        [AllowAnonymous]
        public async Task<IActionResult> Get()
        {
return Ok();
    }
    }

你的路由属性有误,试试这个

         [AllowAnonymous]
        [HttpGet("~/api/GeneratePDF/get")]
         public async Task<IActionResult> Get()

或更改您的控制器路线

      [Route("~/api/[controller]/[action]")]
      public partial class GeneratePdfController : ControllerBase