我正在 .NET 6 中构建一个使用身份验证和基于策略的授权的应用程序。两者功能都很好。但是,我需要创建一种在开发环境中绕过授权的方法。下面是我在program.cs中的代码。
我创建了一个禁用授权的类,并将其添加到构建器中。builder.Services.AddSingleton<IAuthorizationHandler, DisableAuthorization>(); 这工作正常,我现在需要做的就是使其以环境“开发”为条件。我的问题是我不知道如何从构建器中获取当前环境(我确实知道构建后如何执行 - 例如,app.Environment.IsDevelopment())。
我已经在网上搜索过,但我能找到的所有解决方案都涉及注入 Startup() 和 ConfigureServices() 方法 - 这两个方法都已被 WebApplication.CreateBuilder取代取代。
在构建应用程序之前获取环境的最有效方法是什么?
当前代码(Program.cs)
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddServerSideBlazor();
builder.Services.AddHttpClient();
builder.Services.AddSingleton<IAppState, AppState>();
builder.Services.AddScoped<IAuthorizationHandler, IsAdminHandler>();
...
//Add authentication and register CAS as the authentication handler
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
// Add cookie authentication
...
builder.Services.AddAuthorization(options =>
{
// Add access policies
options.AddPolicy("IsAdmin", Policies.IsAdminPolicy());
options.AddPolicy("IsManager", Policies.IsManagerPolicy());
options.AddPolicy("IsUser", Policies.IsUserPolicy());
options.AddPolicy("IsReadOnly", Policies.IsReadOnlyPolicy());
// …Run Code Online (Sandbox Code Playgroud) 我正在开发 .NET Blazor 项目,需要将多个级联值传递给通用子表单。下面的代码应用了多个 [CascadingValue] 属性,对于传递一些值来说效果很好,但是当传递更多值时就变得有点麻烦了。是否有通过单个 [CascadingValue] 属性传递多个值的简写?如果没有,是否有更紧凑的方法来传递更多的值?(顺便说一句 - 我确实明白,除了给每个属性命名之外,还有其他选择)。
<CascadingValue Value="@Value1" Name = "Name1" >
<CascadingValue Value="@Value2" Name = "Name2" >
<CascadingValue Value="@Value3" Name = "Name3" >
<FooComponent />
</CascadingValue>
</CascadingValue>
</CascadingValue>
Run Code Online (Sandbox Code Playgroud)