我目前正在开发一个应用程序,我已经在其中设置了授权回退策略,以避免必须在每个控制器上单独设置策略。问题是,你现在必须登录才能访问"wwwroot“(我的前端)下的静态文件,这显然是错误的,因为你需要前端能够登录。
有没有一种方法可以使用回退策略,但从它排除静态文件(例如,以某种方式添加AllowAnonymous到它)?或者我走错了路,应该以不同的方式解决这个问题?
编辑:直接访问静态文件(https://localhost:5001/index.html)是可行的,但是当我调用根url (https://localhost:5001)和MapFallbackToFile("index.html")时,我得到了一个401错误。如果我注释掉回退策略,一切都会正常工作。
这是我目前的Startup.cs (我正在试用.NET 6)
授权服务:
builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireRole(Roles.User)
.Build();
});中间件:
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Web v1"));
}
else
{
app.UseHsts();
}
app.UseHealthChecks("/health");
app.UseHangfireDashboard();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseMiddleware<UserMiddleware>();
app.UseResponseCompression();
app.MapControllers();
app.MapFallbackToFile("index.html");
app.Run();发布于 2021-09-20 16:14:00
要让身份验证只命中razor页面和控制器,而不访问其他文件,应该做到这一点:
services.AddRazorPages().AddMvcOptions(options =>
options.Filters.Add(new AuthorizeFilter("MyCustomPolicy"))
);https://stackoverflow.com/questions/69247155
复制相似问题