在startup.cs中访问appsetting.json值

Jor*_*ald 10 c# asp.net-core-2.0

我了解如何为appsettings.json配置服务并将它们注入控制器.但是,我需要在配置Auth时使用ConfigureServices中的值.我该怎么做?请参阅下面的示例.特别是这一行:

option.clientId = /*Need client Id from appsettings.json*/
Run Code Online (Sandbox Code Playgroud)

码:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.Configure<AADSettings>(Configuration.GetSection("AADSettings"));
            services.Configure<APISettings>(Configuration.GetSection("APISettings"));

            // Add Authentication services.
            services.AddAuthentication(sharedOptions =>
            {
                sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
                // Configure the OWIN pipeline to use cookie auth.
                .AddCookie()
                // Configure the OWIN pipeline to use OpenID Connect auth.
                .AddOpenIdConnect(option =>
                {
                    option.clientId = /*Need client Id from appsettings.json*/

                    option.Events = new OpenIdConnectEvents
                    {
                        OnRemoteFailure = OnAuthenticationFailed,
                    };
                });
        }
Run Code Online (Sandbox Code Playgroud)

小智 24

您可以像这样访问此ConfigureServices方法

var config = Configuration.GetSection("AADSettings").Get<AADSettings>();
option.clientId = config.ClientId;
Run Code Online (Sandbox Code Playgroud)

要使上述代码工作,您需要将带有ClientId的POCO类称为AADSettings作为属性

public class AADSettings
{
 public string ClientId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在appsettings.json文件中,您需要有这样的条目

"AADSettings": {
    "ClientId": "Client1",
}
Run Code Online (Sandbox Code Playgroud)


Wah*_*uen 8

假设在您的appsettings.json中,您可以将其放在这样的节点下:

"option": {
  "clientId": "example client id"
}
Run Code Online (Sandbox Code Playgroud)

那么您应该可以通过以下代码访问它

option.clientId = Configuration["option:clientId"]
Run Code Online (Sandbox Code Playgroud)

  • “配置”从哪里来?它没有被定义。 (3认同)
  • 它通常在Startup.cs类的顶部声明,并从`IConfiguration` Startup.cs`public Startup(IConfiguration configuration,IHostingEnvironment env)中注入。_environment = env; }`public IConfiguration配置{get; }` (3认同)

Maj*_*aey 7

启动.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    
    public IConfiguration Configuration { get; }
    

    public void ConfigureServices(IServiceCollection services)
    {
   
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment)
    {
         User = Configuration.GetSection("HangfireSettings:UserName").Value,
         Pass = Configuration.GetSection("HangfireSettings:Password").Value
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序设置.json:

  "HangfireSettings": {
    "UserName": "admin",
    "Password": "admin"
  },
Run Code Online (Sandbox Code Playgroud)