WebAPI-配置

WebAPI-配置

ASP.NET Core 按照以下顺序加载配置源,后面的配置源可以覆盖前面的配置源:

  • appsettings.json

  • appsettings.{Environment}.json

  • secrets.json(仅限开发环境)

  • 环境变量

  • 命令行参数


ASPNETCORE_ENVIRONMENT

运行环境:ASP.NET Core会从环境变量中读取名字为ASPNETCORE_ENVIRONMENT的值,从而读取相应的配置文件(appsetting.json)

Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")

除了可以在系统的环境变量中配置此项之外,还可以直接在ide中配置启动时的环境变量

而ide会从launchSettings.json文件中读取来定义项目在开发环境中的启动配置,其中就包含了environmentVariables一项

此项定义的环境变量,会被ide加载,在启动时应用

"WebAPI": {
    "commandName": "Project",
    "dotnetRunMessages": true,
    "launchBrowser": true,
    "launchUrl": "swagger",
    "applicationUrl": "https://localhost:7066;http://localhost:5117",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development" // 启动时使用Development配置文件启动
}

综上,我总结了三种配置环境变量的方式

  • 系统中配置环境变量
  • 在开发时,通过ide配置环境变量(会读取launchSettings.json中的内容)
  • 在Gitlab的CI中,配置项目启动的环境变量

IWebHostEnvironment

IWebHostEnvironment 接口在 ASP.NET Core 中用于提供有关当前托管环境的信息,例如环境名称(如开发、生产、测试等)

  • 获取环境名称:通过 EnvironmentName 属性获取当前环境的名称。

  • 访问内容根目录:通过 ContentRootPath 属性获取应用的内容根目录路径。

  • 访问 Web 根目录:通过 WebRootPath 属性获取应用的 Web 根目录路径

无论是在Program还是其他文件中,我们只需要将IWebHostEnvironment注入,即可直接获取想要的内容

IHostEnvironment 是 ASP.NET Core 3.0 及之后版本中引入的接口,用于替代 IWebHostEnvironment


secrets.json

在开发过程中,如果使用appsetting.json的文件配置方式来配置一些应用的账号和密码,然后上传到github上,会导致非常严重的安全问题

这时我们可以使用secrets.json来保存我们的文件配置


数据库配置

在之前的项目中,数据库服务的配置方式是通过DbContext文件中,直接使用明文字符串进行配置

我们可以在Program.cs文件中,利用配置文件的方式直接进行配置

program.cs
builder.Services.AddDbContext<DBContext>(option =>
{
    var str = builder.Configuration.GetValue<string>("ConnectionStrings:DefaultConnection");
    option.UseNpgsql(str);
});

DbContext

需要注入的是,必须将DbContextOptions作为构造函数的形参注入到DBContext中,并将对象options传给父类DbContext的构造函数中调用

public class DBContext:DbContext
{
    public DBContext(DbContextOptions options) : base(options)
    {
    }

    DbSet<Person> Persons { get; set; }
}

配置好后,就可以直接在服务层注入DBContext依赖,并直接调用