如何在Asp.net core 6 Program.cs文件中使用appsettings.json

Saj*_*jed 161 c# .net-core asp.net-core .net-6.0

我正在尝试访问我的 Asp.net core v6 应用程序 Program.cs 文件中的 appsettings.json,但在此版本的 .Net 中,Startup 类和 Program 类合并在一起,并且 using 和 another 语句被简化并从 Program 中删除。CS。在这种情况下,如何访问 IConfiguration 或如何使用依赖注入?

代码

这是 Asp.net 6 为我创建的默认 Program.cs

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = "localhost:6379";
});

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new() { Title = "BasketAPI", Version = "v1" });
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "BasketAPI v1"));
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Run Code Online (Sandbox Code Playgroud)

例如,我想在这一行中使用 appsettings.json 而不是硬类型连接字符串:

options.Configuration = "localhost:6379";
Run Code Online (Sandbox Code Playgroud)

dim*_*its 144

如果我们在应用程序设置中有

"settings": {
    "url": "myurl",
    "username": "guest",
    "password": "guest"
  }
Run Code Online (Sandbox Code Playgroud)

我们有班级

public class Settings
    {
        public string Url { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我们也可以使用

var settings = builder.Configuration.GetSection("Settings").Get<Settings>();

var url = settings.Url;
Run Code Online (Sandbox Code Playgroud)

ETC....

  • 这应该被标记为正确的 .NET Core 6 Answare,它只带有最小的startup.cs类。非常感谢您的例子!! (18认同)

dav*_*owl 97

虽然上面的示例有效,但执行此操作的方法如下:

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = builder.Configuration["Redis"];
});
Run Code Online (Sandbox Code Playgroud)

WebApplicationBuilder有一个配置对象作为您可以使用的属性。

  • 使用空的 Web 项目。如果您想在控制台应用程序中访问 ASP.NET API,则需要向 Microsoft.AspNetCore.App 添加 FrameworkReference (2认同)

May*_*ote 38

默认包含appsettings.json,您可以直接使用。如果您想显式包含文件,可以像这样包含它们

builder.Configuration.AddJsonFile("errorcodes.json", false, true);
Run Code Online (Sandbox Code Playgroud)

像这样的依赖注入

builder.Services.AddDbContext<>() // like you would in older .net core projects.
Run Code Online (Sandbox Code Playgroud)

  • 它有效,但我需要先在 .NET Core 6 中手动添加 NuGet 数据包。 &lt;PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0" /&gt; &lt;PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables " Version="6.0.1" /&gt; &lt;PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0" /&gt; &lt;PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0。 0"/&gt; (3认同)

Nko*_*osi 31

假设有一个appsettings.json

{
    "RedisCacheOptions" : {
        "Configuration": "localhost:6379"
    }
}
Run Code Online (Sandbox Code Playgroud)

没有什么可以阻止您构建配置对象来提取所需的设置。

IConfiguration configuration = new ConfigurationBuilder()
                            .AddJsonFile("appsettings.json")
                            .Build();

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddStackExchangeRedisCache(options => {
    options.Configuration = configuration["RedisCacheOptions:Configuration"];
});

//...
Run Code Online (Sandbox Code Playgroud)


Joh*_*eer 28

通过注入检索appsettings.json部分值

appsettings.json部分:

{
  "AppSettings": {
    "Key": "Value"
  }
}
Run Code Online (Sandbox Code Playgroud)

AppSettings.cs

public class AppSettings
{
    public string Key { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Program.cs

builder.Services.AddOptions();
builder.Services.Configure<AppSettings>(
    builder.Configuration.GetSection("AppSettings"));
Run Code Online (Sandbox Code Playgroud)

IOptions<>通过构造函数注入:

private readonly AppSettings _appSettings;

public HomeController(
    IOptions<AppSettings> options)
{
    _appSettings = options.Value;
}
Run Code Online (Sandbox Code Playgroud)


usr*_*526 17

创建一个类:

public class RedisCacheOptions
{
    public string Configuration { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,在您的 中program.cs,执行以下操作:

var redisCacheOptions = new RedisCacheOptions();
builder.Configuration.GetSection(nameof(RedisCacheOptions)).Bind(redisCacheOptions);
Run Code Online (Sandbox Code Playgroud)

您现在只需说以下内容即可访问配置信息:

redisCacheOptions.Configuration
Run Code Online (Sandbox Code Playgroud)

现在假设您有一个嵌套结构,appSettings.json如下所示:

"AuthenticationConfiguration": {
  "JwtBearerConfiguration": {
    "Authority": "https://securetoken.google.com/somevalue",
    "TokenValidationConfiguration": {
      "Issuer": "https://securetoken.google.com/somevalue",
      "Audience": "somevalue"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您的类结构将类似于:

public class AuthenticationConfiguration
{
    public JwtBearerConfiguration JwtBearerConfiguration { get; set; } = new JwtBearerConfiguration();
}

public class JwtBearerConfiguration
{
    public string Authority { get; set; }

    public TokenValidationConfiguration TokenValidationConfiguration { get; set; } =
        new TokenValidationConfiguration();
}

public class TokenValidationConfiguration
{
    public string Issuer { get; set; }
    public string Audience { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,如果你要做:

var authConf = new AuthenticationConfiguration();
builder.Configuration.GetSection(nameof(AuthenticationConfiguration)).Bind(authConf);
Run Code Online (Sandbox Code Playgroud)

然后在您的程序中,您可以按以下方式访问值:

AuthenticationConfiguration.JwtBearerConfiguration.Authority
Run Code Online (Sandbox Code Playgroud)

这种方法允许您消除魔术字符串,而且您还可以获得 IntelliSense,因此这是双赢的。

  • 感谢您展示“builder.Configuration.GetSection()”。这就是我一直在寻找的! (3认同)

Mus*_*afa 9

在 Program.cs 中,尝试以下代码:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

ConfigurationManager configuration = builder.Configuration;

var rabbitMQSection = configuration.GetSection("RabbitMQ");
var rabbitMQConnectionUrl = rabbitMQSection["ConnectionUrl"];
Run Code Online (Sandbox Code Playgroud)

文件所在位置appsettings.json

"AllowedHosts": "*",
"RabbitMQ": {
    "ConnectionUrl": "amqp://guest:guest@localhost:5672/"
}
Run Code Online (Sandbox Code Playgroud)


Aya*_*ifa 8

已解决:在dotnet6中的program.css中获取appsetting值

应用程序设置.json

  "AllowedHosts": "*",
  "ServiceUrls": {
  "EmployeeAPI": "https://localhost:44377/" },
Run Code Online (Sandbox Code Playgroud)

程序.cs

var builder = WebApplication.CreateBuilder(args);    
var provider = builder.Services.BuildServiceProvider();
var configuration = provider.GetService<IConfiguration>();
SD.EmployeeAPIBase = configuration.GetValue<string>("ServiceUrls:EmployeeAPI");
Run Code Online (Sandbox Code Playgroud)

类静态变量:

public static class SD //Static Details
{
    public static string EmployeeAPIBase { get; set; }     
}
Run Code Online (Sandbox Code Playgroud)

最后,使用完整的 URL

URL = SD.EmployeeAPIBase + "api/EmpContact/GetGovernates"
Run Code Online (Sandbox Code Playgroud)


Kir*_*nce 8

由于我的应用程序是 consol .NET Core 6 应用程序,因此我必须首先安装 nuget 包:

  • 微软.扩展.托管
  • Microsoft.扩展.配置

然后添加它们的关联用法:

  • 使用 Microsoft.Extensions.Hosting;
  • 使用 Microsoft.Extensions.Configuration;

然后我将此代码添加到 Program.cs 文件中

// Build a config object, using env vars and JSON providers.
IConfiguration config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .AddEnvironmentVariables()
    .Build();
Settings settings = config.GetRequiredSection("Settings").Get<Settings>();
Run Code Online (Sandbox Code Playgroud)

我有一个 Settings.cs 类来接受 appsettings.json 文件中的值

设置.cs

internal class Settings
{
    public static string Setting1 { get; set; }
    public static string Setting2 { get; set; }
    public static string Setting3 { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

和 AppSettings.json

"Settings": {
    "Setting1": "yep",
    "Setting2": "nope",
    "Setting3": "kjkj"
  }
Run Code Online (Sandbox Code Playgroud)

Microsoft 提供的此资源帮助我了解新的 .NET Core 6 架构

https://learn.microsoft.com/en-us/dotnet/core/extensions/configuration