相关疑难解决方法(0)

如何在ConfigureServices方法中获取IOptions?

我有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 …

c# asp.net-core-mvc .net-core asp.net-core

28
推荐指数
4
解决办法
9789
查看次数

Configuration.GetSection 在 .net core (3.1) 中返回 null

我正在尝试使用“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 文件中获取信息吗?

在此输入图像描述

在此输入图像描述

请帮忙。提前致谢

.net configuration asp.net-core

6
推荐指数
1
解决办法
1万
查看次数

Configuration.GetSection 返回空值

我无法让我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)

c# asp.net-core asp.net-core-configuration

5
推荐指数
1
解决办法
3942
查看次数

如何更改“.AspNetCore.Identity.Application”cookie 过期时间?

我使用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

5
推荐指数
2
解决办法
1万
查看次数

配置GetSection返回对象部分的空值

您好,我在中使用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)

c# asp.net-core

1
推荐指数
2
解决办法
1553
查看次数