第九节:ASP.NET Core 中多环境的使用
一. 环境相关配置
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 中多环境的使用的更多相关文章
- Asp.Net Core 中的环境变量
Asp.Net Core 中的环境变量 软件开发环境在大多数软件开发组织中,我们通常具有以下开发环境. 开发环境--Development 演示(模拟.临时)环境--Staging 生产环境-- Pr ...
- (10)ASP.NET Core 中的环境(Environments:dev, stage, prod)
1.环境变量配置 ASP.NET Core在应用程序启动时读取环境变量(Properties\launchSettings.json)ASPNETCORE_ENVIRONMENT,并将该值存储在IHo ...
- ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作
前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...
- ASP.NET Core中使用GraphQL - 第九章 在GraphQL中处理多对多关系
ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...
- 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常)
一. 简介 1. 说明 提到过滤器,通常是指请求处理管道中特定阶段之前或之后的代码,可以处理:授权.响应缓存(对请求管道进行短路,以便返回缓存的响应). 防盗链.本地化国际化等,过滤器用于横向处理业务 ...
- 第十四节:Asp.Net Core 中的跨域解决方案(Cors、jsonp改造、chrome配置)
一. 整体说明 1. 说在前面的话 早在前面的章节中,就详细介绍了.Net FrameWork版本下MVC和WebApi的跨域解决方案,详见:https://www.cnblogs.com/yaope ...
- 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证
注:下载本文提到的完整代码示例请访问:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angu ...
- 为什么我的会话状态在ASP.NET Core中不工作了?
原文:Why isn't my session state working in ASP.NET Core? Session state, GDPR, and non-essential cookie ...
- Asp.Net Core中利用Seq组件展示结构化日志功能
在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...
随机推荐
- gdb gdbtui
1. gdbtui 打开tui模式 gdbtui a.out gdb -tui a.out 调试一个正在运行的进程 gdb -p pid 在linux自带的终端里是正常显示的,但是在securecrt ...
- Flink流式计算
Structured Streaming A stream is converted into a dynamic table. A continuous query is evaluated on ...
- Makefile 基础语法
1.. specify the directores , i not specified , search current directory put every folder into a list ...
- mac运行模拟器simulator突然很慢
一直都正常,突然变慢,而且慢的离谱. 上网查了下,这里记录下,或许问题不仅限于此. simulator->Debug->Slow Animations. 这个Slow Animations ...
- 前几天去电脑城升级了下主机配置(酷睿i3-9100F)
因为自用电脑配置有点儿低了,前几天路过电脑城正好顺便升级下主机配置. 平时又不玩儿什么游戏,只是简单的使用,于是酷睿i3-9100F就成为了我的选择. 酷睿i3-9100F 四核四线程,不带核显(GP ...
- matplotlib---画等高线
contour - 绘制等高线 mp.contour(x, y, z, 等高线条数,colors=颜色, linewidth=线宽)#等高线绘制 contourf - 填充等高线 mp.contour ...
- 201871010132-张潇潇-《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 小学四则运算口算练习app
目标: 第一次尝试做APP,这次做的东西不是很麻烦,做出一个口算练习的加减乘除的页面,使用者做题,设有答案页,进行核对! 核心部分是出题页面的程序,还有答案页的程序.不设置登录注册页面.冲刺时间:一周 ...
- 【神奇性质】【P5523】D [yLOI2019] 珍珠
D [yLOI2019] 珍珠 Description 给定一个 deque,要求支持 push_back 和 push_front 操作,并且查询前缀与非和以及后缀与非和. deque中只会有 \( ...
- UDF——监测指定点的物理量
Fluent版本:2019 R1 Visual Studio版本:Visual Studio 2013 其他版本应该也是适用的 算例来源于:https://confluence.cornell.edu ...