一. 环境相关配置

1. 说明

  ASP.NET Core 在应用启动时读取环境变量 ASPNETCORE_ENVIRONMENT, ASPNETCORE_ENVIRONMENT 可设置为任意值,但框架仅支持三个值:Development(开发)、Staging(测试)

和 Production(生产)。 如果未设置 ASPNETCORE_ENVIRONMENT,则默认为 Production(即生产环境)。

2. 获取方法

  IHostingEvironment对象,常用的四个方法分别是:

  ①:是否是开发 IsDevelopment

  ②:是否是测试 IsStaging

  ③:是否是生产 IsProduction

  ④:是否是自定义的xxx环境 IsEnvironment("xxx")

详见:Startup类中的Configure方法

3. 环境变量配置的几种方法

 ①. cmd指令的形式设置: set ASPNETCORE_ENVIRONMENT=Staging

【仅对当前窗口有效,窗口关闭时,ASPNETCORE_ENVIRONMENT 设置将恢复为默认设置或计算机值。】

 ②. 电脑环境变量全局设置:我的电脑属性→环境变量→ASPNETCORE_ENVIRONMENT :Development

特别注意:以上两种方式,仅适用于通过命令启动的模式,如:dotnet ManyEnvironment.dll ,然后在浏览器中通过 5000端口进行访问。

 ③. 代码层次launchSettings.json中配置,配置文件中有两个选项,一个是IIS Express,一个是项目名称,这两个对应上面VS工具栏不同的启动方式,省略的话默认为 Production环境。

(代码层次的配置优先级要 大于 前面两种模式)

二. 基于环境的Startup 类和方法约定

1. Startup类约定

(1).说明

  Asp.Net Core启动时,可以为不同的环境单独定义 Startup{EnvironmentName 类(例如,StartupDevelopment、StartupProduction、StartupStaging),相应 Startup 类会在运行时得到选择。

优先考虑名称后缀与当前环境相匹配的类。 如果找不到匹配的 Startup{EnvironmentName},就会使用默认的 Startup 类。

(2).实战测试

  新建StartupDevelopment、StartupProduction、StartupStaging三个类,每个类中利用Run方法中止中间件并输出当前环境,然后在Program方法中利用反射获取Startup相关类,代码如下:

  public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
//基于Startup类的加载方式
var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
return WebHost.CreateDefaultBuilder(args).UseStartup(assemblyName);
}

然后在LaunchSetting.json中修改运行环境,发现加载的是不同的Startup,并输出对应的内容。

三个Startup代码分享

  public class StartupDevelopment
{
public StartupDevelopment(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//终止中间件
app.Run(async context =>
{
await context.Response.WriteAsync("Environment is Development");
}); app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}

StartupDevelopment

   public class StartupProduction
{
public StartupProduction(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//终止中间件
app.Run(async context =>
{
await context.Response.WriteAsync("Environment is Production");
}); app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}

StartupProduction

   public class StartupStaging
{
public StartupStaging(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//终止中间件
app.Run(async context =>
{
await context.Response.WriteAsync("Environment is Staging");
}); app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}

StartupStaging

2. Startup方法约定

  把前面类约定中配置Program方法中恢复原样,然后在Startup类中新建:

    ConfigureStagingServices、ConfigureStaging

    ConfigureDevelopmentServices、ConfigureDevelopment

    ConfigureProductionServices、ConfigureProduction

  然后在LaunchSetting.json中修改运行环境,通过加断点的形式,发现进入到不同的Services中了。

代码分享:

  public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; } /**************************************下面是Startup方法约定***********************************************/ public void ConfigureStagingServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} public void ConfigureStaging(IApplicationBuilder app, IHostingEnvironment env)
{
//终止中间件
app.Run(async context =>
{
await context.Response.WriteAsync("Environment is Staging");
});
} public void ConfigureDevelopmentServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} public void ConfigureDevelopment(IApplicationBuilder app, IHostingEnvironment env)
{
//终止中间件
app.Run(async context =>
{
await context.Response.WriteAsync("Environment is Development");
});
} public void ConfigureProductionServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} public void ConfigureProduction(IApplicationBuilder app, IHostingEnvironment env)
{
//终止中间件
app.Run(async context =>
{
await context.Response.WriteAsync("Environment is Production");
});
} }

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

第九节:ASP.NET Core 中多环境的使用的更多相关文章

  1. Asp.Net Core 中的环境变量

    Asp.Net Core 中的环境变量 软件开发环境在大多数软件开发组织中,我们通常具有以下开发环境. 开发环境--Development 演示(模拟.临时)环境--Staging 生产环境-- Pr ...

  2. (10)ASP.NET Core 中的环境(Environments:dev, stage, prod)

    1.环境变量配置 ASP.NET Core在应用程序启动时读取环境变量(Properties\launchSettings.json)ASPNETCORE_ENVIRONMENT,并将该值存储在IHo ...

  3. ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

    前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...

  4. ASP.NET Core中使用GraphQL - 第九章 在GraphQL中处理多对多关系

    ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...

  5. 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常)

    一. 简介 1. 说明 提到过滤器,通常是指请求处理管道中特定阶段之前或之后的代码,可以处理:授权.响应缓存(对请求管道进行短路,以便返回缓存的响应). 防盗链.本地化国际化等,过滤器用于横向处理业务 ...

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

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

  7. 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证

    注:下载本文提到的完整代码示例请访问:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angu ...

  8. 为什么我的会话状态在ASP.NET Core中不工作了?

    原文:Why isn't my session state working in ASP.NET Core? Session state, GDPR, and non-essential cookie ...

  9. Asp.Net Core中利用Seq组件展示结构化日志功能

    在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...

随机推荐

  1. ES6 入门系列 (一)ES6的前世今生

    要学好javascript , ECMAScript标准比什么都强, ESMAScript标准已经用最严谨的语言和最完美的角度展现了语言的实质和特性. 理解语言的本质后,你已经从沙堆里挑出了珍珠,能经 ...

  2. 【Spring Cloud】Spring Cloud之自定义@SpringCloudProfile注解实现@Profile注解的功能

    一.为什么会想到定义@SpringCloudProfile这样的注解 首页提一下@Profile注解:它主要用与Spring Boot多环境配置中,指定某个类只在指定环境中生效,比如swagger的配 ...

  3. 网络编程socket理论一

    网络通信理论 首先说下网络之间的通信流程看图 Socket 层是位于运输层和应用层之间的,封装好的,方便使用 Socket 是什么和工作流程 Socket是应用层与TCP/IP协议族通信的中间软件抽象 ...

  4. python 和 R 语言中的等差数列

    等差数列的通项公式:an = a0 + n*d. 数学上 n 是可以取遍整个整个正整数集的,在现实中,n  是有范围的. 1.R 语言用 seq()  函数产生等差数列: 2.python 中 ran ...

  5. centos7删除Apache组件

    非特殊需要不要删除centos7中Apache等组件!首先查看centos中Apache版本(前面我们说了centos7删除PHP,centos7删除MariaDB,可能很多朋友会有疑问为什么要把所有 ...

  6. TensorFlow Lite for Android示例

    一.TensorFlow  Lite TensorFlow Lite 是用于移动设备和嵌入式设备的轻量级解决方案.TensorFlow Lite 支持 Android.iOS 甚至树莓派等多种平台. ...

  7. Python进阶-IV-Wrapper高阶

    一.装饰器回顾: 1.标准的装饰器示例 def trapper(func): def inner(*args, **kwargs): print('插入到被装饰函数前的功能!') res = func ...

  8. vue-cli3和ts建立vue项目

    第一步,如果你之前没有装vuecli,可以直接执行下面命令 npm install --global @vue/cli 注:这里我install 的时候不成,于是我用的是 cnpm install - ...

  9. 【oracle】去重

    基本去重: SELECT DISTINCT * FROM TABLE; 其他去重: 待添加

  10. Android 开发基础入门篇: 复制一个工程作为一个新的工程

    说明 咱们做项目很多时候都需要复制一份工程出来作为一个新的工程 把第一节的工程拷贝到这一节 修改工程名字 打开软件导入此工程 修改包名 第一节的时候说了,一个APP一个包名 自行添加修改 自行修改 自 ...