我有asp.net核心应用程序.我想使用IOptions模式从appsettings.json注入值.所以我有一个类SecurityHeaderOptions,并且还有目标类,SecurityHeadersBuilder其构造函数IOptions<SecurityHeaderOptions>作为参数.
我知道.net核心可以在用容器注册后SecurityHeadersBuilder通过注入隐式创建实例IOptions<SecurityHeaderOptions>.
但是,我想显式创建实例SecurityHeadersBuilder,调用其方法之一,然后使用容器注册实例.
public sealed class SecurityHeaderOptions
{
public string FrameOption { get; set; }
public string XssProtection { get; set; }
}
public class SecurityHeadersBuilder
{
private readonly SecurityHeaderOptions _options = null;
public SecurityHeadersBuilder(IOptions<SecurityHeaderOptions> options)
{
_options = options.Value;
}
public SecurityHeadersBuilder AddDefaultPolicy()
{
AddFrameOptions();
AddConetntSecurityPolicy();
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
ConfigureServices方法
public void ConfigureServices(IServiceCollection services)
{
services.Configure<SecurityHeaderOptions>(Configuration.GetSection("SecurityHeaderOptions"));
services.AddScoped<SecurityHeadersBuilder>(provider =>
new SecurityHeadersBuilder(?????).AddDefaultPolicy())
}
Run Code Online (Sandbox Code Playgroud)
问题
1>如果我明确地将选项传递给构造函数,我是否需要SecurityHeaderOptions …
我正在尝试使用“Configuation.GetSection”获取 appSettings.json 文件的信息。但不知何故我无法得到这个。
这是代码
appSettings.Development.json:
{
"test": {
"a": "sdfs"
}
Run Code Online (Sandbox Code Playgroud)
启动.cs
var test = Configuration.GetSection("test");
Run Code Online (Sandbox Code Playgroud)
我需要运行什么才能从 appsettings.json 文件中获取信息吗?
请帮忙。提前致谢
我无法让我Configuration.GetSection返回.Value. 我想我实施了这个问题的所有建议,但仍然无法让它发挥作用。
appsettings.json
{
"AmazonSettings": {
"BaseUrl": "https://testing.com",
"ClientID": "123456",
"ResponseType": "code",
"RedirectUri": "https://localhost:44303/FirstTimeWelcome"
},
}
Run Code Online (Sandbox Code Playgroud)
启动:
public IConfiguration Configuration { get; }
public Startup(IHostingEnvironment env)
{
//Set up configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud)
配置服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.Configure<AmazonSettings>(Configuration.GetSection("AmazonSettings"));
services.AddMvc()
Run Code Online (Sandbox Code Playgroud)
AmazonSettings 类:
public class AmazonSettings
{
public string BaseUrl { get; set; }
public string ClientID { get; set; …Run Code Online (Sandbox Code Playgroud) 我使用ASP.NET核心与Identity Server和Open标识连接所描述这里。设置“记住我”选项时(默认为 14 天),我需要更改身份验证 cookie 的过期时间。我可以看到名为“.AspNetCore.Identity.Application”的 cookie 对此负责。我正在尝试像这样设置到期时间:
.AddCookie(options =>
{
options.Cookie.Expiration = TimeSpan.FromDays(1);
options.ExpireTimeSpan = TimeSpan.FromDays(1);
})
Run Code Online (Sandbox Code Playgroud)
但它会影响另一个名为“.AspNetCore.Cookies”(包含相同的令牌值)的 cookie,它具有 Session 过期时间并且似乎没有做任何事情。我发现的所有更改过期时间的方法都只修改了“.AspNetCore.Cookies”cookie,我找不到任何修改“.AspNetCore.Identity.Application”cookie 的方法。(顺便说一句,services.ConfigureApplicationCookie某种原因,我根本没有触发方法)。
谁能解释一下这两个 cookie 之间的区别,以及如何修改“.AspNetCore.Identity.Application”过期时间?
我的代码 Startup.ConfigureServices
services.AddMvc(options =>
{
// ...
})
services.AddAuthorization(options =>
{
options.AddPolicy(PolicyNames.UserPolicy, policyBuilder =>
{
// ...
});
});
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "oidc";
})
.AddCookie(options =>
{
options.AccessDeniedPath = "/AccessDenied";
options.SlidingExpiration = true;
})
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Authority = "<authority>"; …Run Code Online (Sandbox Code Playgroud) authentication asp.net-identity openid-connect asp.net-core identityserver4
您好,我在中使用json一个配置文件.NET Core App,但我不明白为什么我得到的对象子节的值为null:
{
"tt": {
"aa":3,
"x":4
},
"Url":333,
"Config": {
"Production": {
"RedisAddress": {
"Hostname": "redis0",
"Port": 6379
},
"OwnAddress": {
"Hostname": "0.0.0.0",
"Port": 9300
}
},
"Dev": {
"RedisAddress": {
"Hostname": "redis0",
"Port": 6379
},
"OwnAddress": {
"Hostname": "0.0.0.0",
"Port": 9300
},
"Logger": "logger.txt"
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试GetSection("Config")或GetSection("tt")我获得值时null,但是它返回原始类型的值,例如我的情况Url。
有趣的是,如果我在内部窥视,就会configuration.Providers[0].Data像图片中一样呈现所有内容:
为什么它为object类型返回null ?
码
WebHostBuilder builder = new WebHostBuilder();
builder.UseStartup<Startup>();
string appPath = …Run Code Online (Sandbox Code Playgroud)