1.环境变量配置

ASP.NET Core在应用程序启动时读取环境变量(Properties\launchSettings.json)ASPNETCORE_ENVIRONMENT,并将该值存储在IHostingEnvironment.EnvironmentName中。ASPNETCORE_ENVIRONMENT可设置为任意值,但框架只支持三个值:Development(开发)、Staging (分阶段)和 Production(生产)。如果未设置ASPNETCORE_ENVIRONMENT,则默认为 Production。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
{
app.UseExceptionHandler("/Error");
}
}

Properties/launchSettings.json里面的配置如下:

●当ASPNETCORE_ENVIRONMENT设置为Development时,调用UseDeveloperExceptionPage。
●当ASPNETCORE_ENVIRONMENT设置为Staging、Production时,调用UseExceptionHandler。

2.开发环境配置

开发环境可以启用不应该在生产中公开的功能。例如,只在开发环境中启用了开发人员异常页。本地计算机开发环境可以在项目的Properties\launchSettings.json文件中设置。在 launchSettings.json中设置的环境值替代在系统环境中设置的值。以下 launchSettings.json 文件中显示的三个配置文件:

{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:54339/",
"sslPort":
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_My_Environment": "",
"ASPNETCORE_DETAILEDERRORS": "",
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"EnvironmentsSample": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
},
"applicationUrl": "http://localhost:54340;http://localhost:54341"
},
"Kestrel Staging": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_My_Environment": "",
"ASPNETCORE_DETAILEDERRORS": "",
"ASPNETCORE_ENVIRONMENT": "Staging"
},
"applicationUrl": "http://localhost:51997/"
}
}
}

使用dotnet run启动应用时,会使用具有"commandName": "IISExpress"的第一个配置文件。commandName的值是指定要启动的Web服务器。而launchSettings.json中的applicationUrl属性也可指定服务器URL的列表。 在列表中的URL之间使用分号,如上述环境配置中EnvironmentsSample里面的applicationUrl属性值配置。Visual Studio项目属性“调试”选项卡中也提供了GUI来编辑launchSettings.json文件:

在Web服务器重新启动之前,对项目配置文件所做的更改可能不会生效。必须重新启动 Kestrel才能检测到对环境配置所做的更改。
现在我们来验证开发环境中启用了开发人员异常页示例,首先调试启动第一个配置文件(IISExpress):

3.生产环境配置

Production环境应配置为最大限度地提高安全性、性能和应用可靠性。不同于开发的一些通用设置包括:
●缓存。
●客户端资源被捆绑和缩小,并可能从CDN(网络分发)提供。
●已禁用诊断错误页。
●已启用友好错误页。
●已启用生产记录和监视。例如,Application Insights。
现在我们来验证生产环境中启用了友好错误页示例,首先调试启动第二个配置文件(EnvironmentsSample):

4.基于环境配置的Startup类和方法

当ASP.NET Core应用程序启动时,应用程序可以为不同的环境单独定义Startup类(例如,StartupDevelopment),对应Startup类会在运行时进行选择环境配置。优先考虑名称后缀与当前环境相匹配的Startup类。如果找不到匹配的Startup{EnvironmentName},就会使用原始的Startup类。若要实现基于环境的Startup类,请为使用中的每个环境创建Startup{EnvironmentName} 类:

public class StartupDevelopment
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
}
}
public class StartupProduction
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
}
}

使用接受程序集名称的UseStartup(IWebHostBuilder, String) 进行重载:

public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
return WebHost.CreateDefaultBuilder(args)
.UseStartup(assemblyName);
}
}

通过调试启动第二个配置文件(EnvironmentsSample)看看效果:

因为调试启动第二个配置文件(EnvironmentsSample)的生产(Production)环境,所以Startup类会在运行选择时会针对当前环境配置找到对应Startup类并加载。

参考文献:
在 ASP.NET Core 中使用多个环境

(10)ASP.NET Core 中的环境(Environments:dev, stage, prod)的更多相关文章

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

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

  2. 第九节:ASP.NET Core 中多环境的使用

    一. 环境相关配置 1. 说明 ASP.NET Core 在应用启动时读取环境变量 ASPNETCORE_ENVIRONMENT, ASPNETCORE_ENVIRONMENT 可设置为任意值,但框架 ...

  3. ASP.NET Core中的OWASP Top 10 十大风险-失效的访问控制与Session管理

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...

  4. ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...

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

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

  6. ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

    原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...

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

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

  8. 玩转ASP.NET Core中的日志组件

    简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...

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

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

随机推荐

  1. 使用gacutil把COM组件注册到全局缓存GAC中

    我们在编写软件的时候,有时候需要调用COM组件,那就需要注册了,注册有两种,一种是使用regasm 在程序运行的时候注册,参考“pb调用C#编写的DLL类库“,不过受路径的限制.还有一种注册方式,使用 ...

  2. druid + mysql + mybatis 批量更新报错

    首先 批量更新报错 sql injection violation, multi-statement not allow 然后看了博客:https://blog.csdn.net/qq_3634595 ...

  3. clickjacking 攻击

    文章:Web安全之点击劫持(ClickJacking) 点击劫持(ClickJacking)是一种视觉上的欺骗手段.大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户 ...

  4. system.exit(int status)中status值不同时的区别

    status为0时为正常退出程序,也就是结束当前正在运行中的java虚拟机. status为非0的其他整数(包括负数,一般是1或者-1),表示非正常退出当前程序. 可以明确的是,无论status是什么 ...

  5. 第09节-使用BTStack编写蓝牙程序

    Bluetooth LE Exploer(微软提供的)可以读取BLE蓝牙设备,可以读写它的值.本篇博客将使用BTStack写出一个精简版的Bluetooth LE Exploer. 涉及文件: bts ...

  6. Java多线程编程核心技术-第4章-Lock的使用-读书笔记

    第 4 章 Lock 的使用 本章主要内容 ReentrantLocal 类的使用. ReentrantReadWriteLock 类的使用. 4.1 使用 ReentrantLock 类 在 Jav ...

  7. plv8 centos install steps

    install deps yum -y update yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL- ...

  8. notapad++正则替换

    1.替换小数点后一位 XP_001663106.2XP_001662510.3XP_001655249.2XP_001655248.1NP_001165739.1 \.[0-9]或者\.\d #第一个 ...

  9. SWA2G422&485JK2G基础篇: 硬件使用说明

    开发板板载介绍(当前使用的测试板,以后期最终版为准) 一,实物图 硬件说明 一,开发板主控芯片说明: 1. 单片机: STM32F103RET6 2. GPRS模块: Air202 二,开发板外设说明 ...

  10. 第02组Beta冲刺(4/4)

    队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:了解整个游戏的流程 GitHub签入记录 接下来的计划:继续完成游戏 还剩下哪些任务:完成游戏 燃尽图 遇到的困难:没有美术比较好的 ...