ASP.NET Core应用程序的参数配置及使用

摘要:
本文介绍了ASP。NETCore应用程序,并介绍如何在应用程序中使用这些配置参数。我相信这将对ASP有很大的帮助。NETCore开发人员。言归正传,以便轻松了解ASP。NET核心应用程序使用配置数据,我们首先修改Startup.cs文件并添加日志控制台输出的代码。appsettings.jsonappsettings.json文件是ASP的配置文件。NETCore应用程序。它通常与应用程序的DLL文件位于同一目录中。

应用程序的开发不仅仅是写代码这点事情。假设你正在开发一个能够支持多次部署的微服务,此时你就需要有一个合理的应用程序配置方案,以便在开发和生产环境中能够方便地选用不同的配置参数,并且能够在部署到容器服务(比如ACS或者Kubernetes)时,这些参数能够被动态地、合理地设置。本文通过最简单的形式,对ASP.NET Core应用程序的不同的配置方式进行介绍,并介绍了在应用程序中如何使用这些配置参数,相信对于ASP.NET Core的开发者会有很大帮助。

提前准备

我们首先使用Visual Studio 2017新建一个ASP.NET Core的应用程序,当然如果没有Visual Studio 2017的话,下载安装了.NET Core SDK之后,使用dotnet new命令也能创建ASP.NET Core应用程序,然后使用你平时习惯使用的编辑器进行代码编辑。我还是建议使用Visual Studio 2017,社区版(Community版)是完全免费的,功能上与专业版和企业版也没多大区别。免费的宇宙最强IDE,放着不用岂不是浪费么。

言归正传,为了能够方便地看出ASP.NET Core应用程序使用配置数据的方式,我们首先修改Startup.cs文件,加入日志控制台输出的代码。关键代码如下:

public class Startup
{
    private readonly ILogger logger;

    public Startup(IConfiguration configuration, ILogger<Startup> logger)
    {
        Configuration = configuration;
        this.logger = logger;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        var mongoHost = Configuration["mongo:server:host"];
        logger.LogInformation("MongoDB Server Host: " + mongoHost);
        // .... 其它代码省略 ....
    }
}

接下来,我们就可以开始做实验了。

参数配置方式

ASP.NET Core提供了多样化的参数配置方式,总结起来,有以下几种常用的参数配置方式:

  • 通过appsettings.json文件
  • 使用系统环境变量
  • 通过命令行进行参数配置

当然,还可以自定义配置文件或者其它的配置方式。不过这里我只打算介绍常规的用法,因为我相信目前ASP.NET Core默认提供的配置方式应该能够满足绝大部分应用场景。如需获取更多有关其它的参数配置方式的详细信息,可以参考微软官方文档

appsettings.json

appsettings.json文件是ASP.NET Core应用程序的配置文件,通常与应用程序的DLL文件在同一个目录下。通过ASPNETCORE_ENVIRONMENT环境变量可以指定具体使用哪个appsettings.json作为配置文件。比如,如果ASPNETCORE_ENVIRONMENT环境变量的值为Production,那么appsettings.Production.json文件就会被使用。这种根据环境变量来决定配置文件的方式,允许通过一个简单的字符串来决定一系列的参数取值,在实际应用中还是非常方便的。

现在,我们修改appsettings.json文件,将MongoDB的连接信息配置进去:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  },
  "AllowedHosts": "*",
  "mongo": {
    "server": {
      "host": "localhost",
      "port": 27017
    },
    "database": "db"
  }
}

然后编译应用程序,并将appsettings.json文件复制到编译输出目录,之后在命令行通过dotnet命令启动应用程序:

image

可以看到,配置数据已经正常输出。接下来,确认一下ASPNETCORE_ENVIRONMENT指定的是Development,因此,我们修改一下appsettings.Development.json文件,使用同样的结构配置MongoDB的连接信息,只不过我们使用localhost_dev来指定mongo:server:host的值:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },

  "mongo": {
    "server": {
      "host": "localhost_dev",
      "port": 27017
    },
    "database": "db"
  }
}

此时,再次启动应用程序,发现配置数据已经更新:

image

因此,可以使用appsettings.json文件,根据不同的运行环境来选择使用不同的配置参数。

环境变量

appsettings.json文件中已经配置好的参数,可以被环境变量覆盖。我们可以通过set命令,在Windows的命令行中设置一个环境变量:

image

再次运行应用程序,得到的结果就是环境变量里所设置的参数值:

image

可以看出,之前由appsettings.json文件指定的参数,已经被环境变量所覆盖。这一特性十分重要,当我们把一个ASP.NET Core应用程序包装成一个docker镜像,并在docker容器中运行时,我们可以方便地使用docker run -e的参数,将环境变量注入进去,并覆盖原来写死在配置文件中的值,这也充分证明了ASP.NET Core对于容器的支持是十分友好的。

命令行参数

在使用dotnet启动应用程序时,可以直接在命令行提供运行时参数,此时命令行参数会覆盖环境变量中的设置,比如:

image

同样,如果ASP.NET Core应用程序被包装成一个docker镜像,那么我们就可以通过docker exec命令对应用程序进行调试,并直接通过命令行注入调试时所需的参数。

在控制器中使用配置参数

要在控制器中使用配置参数,最常用的有两种方法,第一种是在控制器的构造函数中注入IConfiguration对象,另一种则是自定义一个配置数据模型,然后在控制器的构造函数中注入IOptions对象。

注入IConfiguration对象

以下代码演示了通过构造器注入IConfiguration对象的方式来获取配置信息:

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly IConfiguration configuration;

    public ValuesController(IConfiguration configuration)
    {
        this.configuration = configuration;
    }

    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] { this.configuration["mongo:server:host"] };
    }
}

执行结果如下:

image

注入IOptions对象

这种方法首先需要根据配置数据的结构,自定义一个用于保存配置数据的类:

public class Server
{
    public string Host { get; set; }

    public int Port { get; set; }
}

public class Mongo
{
    public Server Server { get; set; }

    public string Database { get; set; }
}

然后,修改Startup.ConfigureServices方法,将配置注入进来:

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.Configure<Mongo>(Configuration.GetSection("mongo"));
    // ...
}

最后,在控制器的构造函数中注入IOptions对象:

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly IOptions<Mongo> configuration;

    public ValuesController(IOptions<Mongo> configuration)
    {
        this.configuration = configuration;
    }

    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] { this.configuration.Value.Server.Host };
    }
}

执行结果也是一样的:

image

总结

本文快速介绍了ASP.NET Core应用程序的基本配置和使用方式,相信对于ASP.NET Core的开发人员会有一定的帮助。ASP.NET Core应用程序的配置还是非常灵活方便的,如果有兴趣深入了解的话,强烈建议阅读微软官方文档,也可以阅读ASP.NET Core的源代码进行深入了解。

免责声明:文章转载自《ASP.NET Core应用程序的参数配置及使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇五个在Safari浏览器上的实用快捷键使用AS3嵌入字体下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Tomcat 03: 常见问题排查

列罗出了Tomcat常见的问题,如不能启动,屏幕一闪而过,启动之后,访问总是出现404等等常见问题。以下排查手段都是针对通过startup.bat 独立方式启动的Tomcat,集成开发环境IDE(IDEA,ECLIPSE,MYECLIPSE等) 下的Tomcat启动不在此知识点讨论范围之内。 步骤 1 : JAVA_HOME   步骤 2 : CATALIN...

Redis 5版本简介

1.redis特点 (1)基于内存 (2)可持久化数据 (3)具有丰富的数据结构类型,适应非关系型数据的存储需求 (4)支持绝大多数主流开发语言,如C、C++、Java、Python、R、JavaScript等。 (5)支持集群模式,高效、稳定。 2.数据类型 (1)键值对形式。 (2)Redis的数据结构类型,指的就是Redis值的结构类型。...

配置java 环境变量(jdk)

java环境变量需要配置3个: JAVA_HOME:D:Program Files (x86)Javajdk1.8 CLASSPATH:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;或者直接写.;%JAVA_HOME%lib; PATH:%JAVA_HOME%in; 查询端口被占用情况 netstat -ao...

Bash变量

1、变量类型 Bash变量有两种:局部变量和环境变量 局部变量:局部变量的范围仅在创建它的Shell中有效 环境变量:能为创建它的Shell及其派生子进程所用的变量,也经常被称为全局变量,一般约定环境变量为大些,它们是那些可以通过内置命令export导出的变量。 2、变量命名 变量名必须以字母或下划线开始,其余部分则可以由字符、数字或下划线构成。变量名中不...

使用nvm管理node不同版本,安装,环境配置,切换不同版本的node版本

文章包含以下内容: 一、下载地址 二、nvm-noinstall.zip安装 三、nvm-setup.zip安装 四、测试安装以及使用 一、下载地址 https://github.com/coreybutler/nvm-windows/releases 二、nvm-noinstall.zip安装 1、把nvm_noinstall.zip解压到比如c:/de...

zookeeper安装及环境变量设置

下载 首先去官网下载(自行选择版本):http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/然后执行tar -zxvf解压 对于后台安装,可以直接使用如下命令。一般建议使用root安装,放到系统目录。 su -cd /usr/local wget http://mirror.bit.edu....