asp.net core支持外部文件和命令行参数方式来配置系统运行所需要的配置信息,我们从下面两个常用场景来具体说下具体使用方法。

一、监听地址及端口配置

1,命令行方式

asp.net core系统通过命令行方式启动,使用的命令如下:

dotnet run

上面的命令直接在源代码目录下执行,便可以编译程序并运行。那对于已经发布好的程序,就不能使用上面的指令了,应该使用下面的指令:

dotnet 程序集文件名(程序集文件名就是程序发布后生成的dll文件)

上面两个指令都能够启动应用程序。程序启动后,默认监听地址及端口是http://localhost:5000。但是程序发布后,肯定不会使用默认的地址及端口,那如果要想让启动时监听其他的地址或域名怎么办?答案是使用--urls参数,具体指令格式如下:

dotnet run --urls="http://域名:端口号" 

如果想设置多个域名,可以使用分号分隔。

程序默认情况下是不支持参数传递的,我们需要对程序进行一些配置。首先需要引入Microsoft.Extensions.Configuration.CommandLine库文件,然后在main方法中添加commandline支持,具体代码如下:

  public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddCommandLine(args)//增加commandline支持
.Build(); var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build(); host.Run();
}
}

  经过配置后就可以使用上面的指令传递参数了

2,配置文件

asp.net core配置信息也可以放置在一个配置文件中,系统启动时进行加载配置文件内容,来影响程序启动所需要的环境参数。我们来看一下具体操作过程。

首先我们需要引入一个库文件"Microsoft.Extensions.Configuration.Json",然后在main方法中引入配置文件路径信息,具体代码如下:

    public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json")
.Build(); var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build(); host.Run();
}
}

  

  

 通过上面方式,我们就增加了一个外部的hosting.json配置文件,在里面我们可以增加监听地址信息,内容如下:

{
"server.urls": "http://*:5001"
}

  

二、运行环境配置

在进行项目开发时,常常要求开发环境,测试环境及正式环境的分离,并且不同环境运行的参数都是不一样的,比如监听地址,数据库连接信息等。当然我们把配置信息保存到一个文件中,每次发布的时候,可以先修改配置文件的内容,然后再进行程序发布,这样操作起来无疑是很麻烦,每次发布都得先确定对应的环境,然后修改配置信息,如果需要同时发布多个环境版本,那就得进行多次操作。

asp.net core 其实已经考虑到了这样的场景,我们可以先看下下面的代码:

 public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}

 上面的代码是出现在startup.cs文件中,里面首先使用AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)加载appsettings配置文件,这个文件里可以放置所有环境共享的信息,后面有一句AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true),env.EnvironmentName其实就是系统环境,根据启动时设置的EnvironmentName不同,可以加载对应的配置文件内容。

 现在的问题是如何去指定这个EnvironmentName?

1,通过命令行指定environment

在执行dotnet run之前,可以先执行以下下面的指令:

set ASPNETCORE_ENVIRONMENT= 环境名称,注意这里没有引号,直接把环境名称写成具体的值即可,比如 set ASPNETCORE_ENVIRONMNET=development

然后再执行dotnet run指令,这样当前运行就会按照set指令中设置的环境进行运行

2,直接给dotnet run指令传递具体参数

先看直接的执行效果:dotnet run --ASPNETCORE_ENVIRONMENT=development

具体做法:引入Microsoft.Extensions.Configuration.CommandLine,Microsoft.Extensions.Configuration.EnvironmentVariables库文件,然后在main方法中增加环境参数的支持,具体代码如下:

    public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddCommandLine(args)
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json")
.Build(); var host = new WebHostBuilder()
.UseEnvironment(config["ASPNETCORE_ENVIRONMENT"])
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build(); host.Run();
}
}

 关键是AddEnvironmentVariables(),UseEnvironment(config["ASPNETCORE_ENVIRONMENT"])两处的处理。这样我们就可以在dotnet run指令后面增加对应的环境参数。 

asp.net core 中灵活的配置方式的更多相关文章

  1. Asp.Net Core中HttpClient的使用方式

    在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数.使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变 ...

  2. 在Asp.Net Core中使用DI的方式使用Hangfire构建后台执行脚本

    最近项目中需要用到后台Job,原有在Windows中我们会使用命令行程序结合计划任务或者直接生成Windows Service,现在.Net Core跨平台了,虽然Linux下也有计划任务,但跟原有方 ...

  3. 3、带你一步一步学习ASP.NET Core中的配置之Configuration

    如果你是刚接触ASP.NET Core的学习的话,你会注意到:在ASP.NET Core项目中,看不到.NET Fraemwork时代中的web.config文件和app.config文件了.那么你肯 ...

  4. 在ASP.NET Core中构建路由的5种方法

    原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 在ASP.NET Core中构建路由的5种方法 原文链接 :https://storm ...

  5. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  6. ASP.NET Core中Middleware的使用

    https://www.cnblogs.com/shenba/p/6361311.html   ASP.NET 5中Middleware的基本用法 在ASP.NET 5里面引入了OWIN的概念,大致意 ...

  7. ASP.NET Core中配置监听URLs的五种方式

    原文: 5 ways to set the URLs for an ASP.NET Core app 作者: Andrew Lock 译者: Lamond Lu 默认情况下,ASP. NET Core ...

  8. 第十四节:Asp.Net Core 中的跨域解决方案(Cors、jsonp改造、chrome配置)

    一. 整体说明 1. 说在前面的话 早在前面的章节中,就详细介绍了.Net FrameWork版本下MVC和WebApi的跨域解决方案,详见:https://www.cnblogs.com/yaope ...

  9. ASP.NET Core中如何调整HTTP请求大小的几种方式

    一.前言 一般的情况下,我们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值. 在ASP.NET Co ...

随机推荐

  1. (转)static 变量

    一. static 变量 static变量大致分为三种用法1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.2. 用于全局变量,主要作用是限制此全局变量被其他的文 ...

  2. yii2 resetful 授权验证

    什么是restful风格的api呢?我们之前有写过大篇的文章来介绍其概念以及基本操作. 既然写过了,那今天是要说点什么吗? 这篇文章主要针对实际场景中api的部署来写. 我们今天就来大大的侃侃那些年a ...

  3. 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)

    A------------------------------------------------------------------------------------ 题目链接:http://20 ...

  4. 瀑布流布局使用详解——JQuery插件Isotope(动态实现子项目筛选)

    瀑布流布局,听起来听牛逼的样子,其实就是简单的子元素筛选功能.不过这一功能在网站页面布局当中还是很常用的,特别是在电商网站中 经常会有点一个钮筛选,然后页面的子元素刷的以下变了样.接下来,我们先简单介 ...

  5. AlertDialog的写法

    public void onItemClick(AdapterView<?> parent, View view, int position,long id) { AlertDialog. ...

  6. An Introduction to Stock Market Data Analysis with R (Part 1)

    Around September of 2016 I wrote two articles on using Python for accessing, visualizing, and evalua ...

  7. Building Particle Filters and Particle MCMC in NIMBLE

    This example shows how to construct and conduct inference on a state space model using particle filt ...

  8. Akka(4): Routers - 智能任务分配

    Actor模式最大的优点就是每个Actor都是一个独立的任务运算器.这种模式让我们很方便地把一项大型的任务分割成若干细小任务然后分配给不同的Actor去完成.优点是在设计时可以专注实现每个Actor的 ...

  9. 高性能队列Disruptor系列1--传统队列的不足

    在前一篇文章Java中的阻塞队列(BlockingQueue)中介绍了Java中的阻塞队列.从性能上我们能得出一个结论:数组优于链表,CAS优于锁.那么有没有一种队列,通过数组的方式实现,而且采用无锁 ...

  10. 创建对象的N种模式

    1 new Object() 先创建一个Object实例,然后为它添加属性和方法 var Person = new Object() Person.name = 'hl' Person.sayName ...