本教程会对基本的. Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用. Net Core 进行 web 开发, 感受到. Net Core 的魅力.
本教程知识点大体分为以下几个阶段
ASP.NET Core MVC 基础知识
Startup 基本配置和理解
Controller 使用
Razor 视图
传统视图
Model Validation (基本用法)
一点点的 vue (教程使用 Vue 配合)
- SqlSugar ORM (进行数据库交互)
- Entity Framework Core(基本介绍使用)
授权和身份验证(MVC 的, WebApi 的不进行介绍)
安全性
测试 / 单元测试
性能基本优化
日志功能
CI/CD
Windows 部署
Linux 部署
上一节我们介绍了中间件的基本使用, 这一节我们讲一讲. Net Core 的环境设置, 以及根据不同的环境加载不同的配置信息
PS: 由于最近一直比较忙, 一直没抽时间更新这个系列, 最近居多的博友催我, 所以继续挤挤时间更新这个系列, 感谢大家的对本系列教程的喜欢和支持.
在实际开发中, 我们的系统往往会是至少两个以上的运行环境, 最基本的就是, 开发环境和运营环境, 体系完整的公司, 还会有测试环境, 预发布环境, 和一些自定义环境等等, 这些环境使用的配置或是一些参数肯定是不一样的, 我们不可能为一个环境准备一份代码, 我们可以通过环境配置, 和 一些 if 判断, 就可以做到环境的自动切换, 下面就仔细说说.
我们先通过默认的. Net Core MVC 设置, 感受一下. 以前的代码找不到了, 新建一个空的. Net Core MVC 项目吧, 代码后面会上传到百度云, 提供下载.
PS: IDE 我已经使用 VS2019
建好之后, 我们打开 Startup.cs 代码文件, 看 Configure 方法, 我相信, 有的博友已经发现了, 里面的第一行代码是个 if, 意思就是判断当前环境是不是开发环境, 看单词的字面意思也是这个意思, 所以学好英文对开发程序有很大的 buff 加成啊~~~
对于 if 里的是什么, 上一节已经讲过, 不再称述.
由此我们得出, 控制环境和判断环境, 都是在 Configure 方法中, 注入的 IHostingEnvironment 接口对象进行的. 这里我说一下, 系统默认提供的几个判断环境的方法. 我们使用 env.Is, VS 的智能提示, 可以得到下面四个方法, 如图:
IsDevelopment 方法大家已经知道了, 判断当前是不是开发环境.
IsProduction 方法, 判断当前是不是运营 (正式) 环境
IsStaging 方法, 判断当前是不是预运行环境
IsEnvironment 方法, 根据传入的环境名称, 判断是不是当前环境类型 (用于自定义环境判断)
我们修改一下 Configure 方法的代码, 修改后为:
- public void Configure(IApplicationBuilder App, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- App.UseDeveloperExceptionPage();
- }
- App.Run(async (context) =>
- {
- context.Response.ContentType = "text/plain;charset=utf-8"; // 防止 WriteAsync 方法输出中文乱码
- if (env.IsDevelopment())
- {
- await context.Response.WriteAsync("开发环境", Encoding.UTF8);
- }
- else if (env.IsProduction())
- {
- await context.Response.WriteAsync("运营环境", Encoding.UTF8);
- }
- else if (env.IsStaging())
- {
- await context.Response.WriteAsync("预发布环境", Encoding.UTF8);
- }
- else
- {
- await context.Response.WriteAsync("自定义环境", Encoding.UTF8);
- }
- });
- }
然后 F5 运行, 浏览器会不出意外的输出: "开发环境"
没毛病, 我们修改一下编译环境, 把 Debug 修改为 Release, 然后生成, 如图:
然后生成项目, 生成成功之后, 到项目的 bin/Release/netcoreapp2.2 目录下, 打开 CMD, 执行 dotnet Unit1.dll 命令, 就会是这样的, 如图:
我们在浏览器输入 http://localhost:5000/ 回车, 不出意外, 会输出: 运营环境 四个大字.
以上的流程, 就演示了最基本的开发环境和运营环境的配置和判断. 下面我们演示自定义环境. 我们接着修改代码, 为当前环境设置个名字, 代码如下
- public void Configure(IApplicationBuilder App, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- App.UseDeveloperExceptionPage();
- }
- env.EnvironmentName = "Cus"; // 设置自定义环境名称
- App.Run(async (context) =>
- {
- context.Response.ContentType = "text/plain;charset=utf-8"; // 防止 WriteAsync 方法输出中文乱码
- if (env.IsDevelopment())
- {
- await context.Response.WriteAsync("开发环境", Encoding.UTF8);
- }
- else if (env.IsProduction())
- {
- await context.Response.WriteAsync("运营环境", Encoding.UTF8);
- }
- else if (env.IsStaging())
- {
- await context.Response.WriteAsync("预发布环境", Encoding.UTF8);
- }
- else
- {
- await context.Response.WriteAsync("自定义环境", Encoding.UTF8);
- }
- });
- }
F5 运行项目, 浏览器毫不意外的输出了: 自定义环境
如果我们要输出 预发布环境的话, 只需要把 EnvironmentName 属性的值改成 "Staging" 即可, 这里不做演示, 自行尝试, 设置代码如下:
env.EnvironmentName = "Staging"; // 设置为预发布环境
发设置为 Staging 和其它值的区别就是系统系统了一个 IsStaging 方法
为了更加直观的演示自定义环境, 我们把 else 改一下, 改完之后的代码如下:
- public void Configure(IApplicationBuilder App, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- App.UseDeveloperExceptionPage();
- }
- env.EnvironmentName = "Cus"; // 设置自定义环境名称
- App.Run(async (context) =>
- {
- context.Response.ContentType = "text/plain;charset=utf-8"; // 防止 WriteAsync 方法输出中文乱码
- if (env.IsDevelopment())
- {
- await context.Response.WriteAsync("开发环境", Encoding.UTF8);
- }
- else if (env.IsProduction())
- {
- await context.Response.WriteAsync("运营环境", Encoding.UTF8);
- }
- else if (env.IsStaging())
- {
- await context.Response.WriteAsync("预发布环境", Encoding.UTF8);
- }
- else
- {
- if (env.IsEnvironment("Cus"))
- {
- await context.Response.WriteAsync("自定义环境: Cus", Encoding.UTF8);
- }
- else if (env.IsEnvironment("Cus1"))
- {
- await context.Response.WriteAsync("自定义环境: Cus1", Encoding.UTF8);
- }
- else
- {
- await context.Response.WriteAsync($"自定义环境: {env.EnvironmentName}", Encoding.UTF8);
- }
- }
- });
- }
具体运行效果和预计的一样, 会输出对应的自定义环境
但是实际开发过程中, 我不推荐在代码里面修改当前环境, 而且通过项目的环境变量设置对应的环境, 具体修改方法如下
1: 点开 Properties
2: 打开 launchSettings.JSON
3: 修改 ASPNETCORE_ENVIRONMENT 的值.
我们修改 EnvironmentName 属性的代码删掉, 修改 launchSettings.JSON 的配置为 Cus, 运行是什么效果, 修改后的效果如图
没出任何以外, 浏览器输出的是自定义环境: Cus, 改成其它的值, 就输入对应的自定义环境, 修改为 Development 就是开发环境, Staging 就是预运营环境, Production 就是运营环境
可能有人就要问了, 你只修改了上面的 ASPNETCORE_ENVIRONMENT, 下面还有一个 ASPNETCORE_ENVIRONMENT 配置, 没修改, 怎么也可以. 别急, 马上就说明
.Net Core MVC 程序, 提供了两种托管方式, 一种是通过 IIS 托管, 一种是自托管, 我们刚刚修改的环境, 只修改了 IIS 托管模式, VS 默认又是 IIS 调试, 所以, 会有效果
如果使用自托管模式调试或发布运行程序, 则修改下面的 Unit1 节点的配置即可. 当然, VS 也提供了调试方式, 切换方法, 点击运行模式即可, 如图:
选择 Unit1, 就是自托管模式啦~ , 然后 F5 运行, 浏览器输出的依然是开发环境, 虽然 IIS 配置的是 Cus 环境, 但是 Unit1 自托管没有修改, 我们修改一下 Unit1 的环境试试, 这里我修改为 Cus100, 然后选择 Unit1 调试, F5 运行, 浏览器输出的就是
没有任何问题
如果你觉得这种修改方式麻烦, 还有一种界面修改方法
我们在项目上右键 --> 属性 --> 调试, 就能看到对应的配置了, 如图:
当前是自托管模式, 我修改为 Cus100, 这里显示的就是 Cus100, 点击上面的配置文件, 还可以修改不同的托管模式的配置:
这里就不做演示了, 修改效果和直接修改 launchSettings.JSON 文件是一样的
------------------------------------------------------------------------------- 分割线 -------------------------------------------------------------------------------
PS: 我们已经把两种托管模式的环境都设置为了默认的 Development, 开发环境.
上面已经讲完了环境的配置和切换, 下面讲讲根据不同的环境, 自动读取不同的配置文件, 我们先修改一下代码, 让输入的文件是从 appsettings.JSON 配置里面读取的, 修改后的 Startup 类代码如下:
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Http;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using System.Text;
- namespace Unit1
- {
- public class Startup
- {
- private readonly IConfiguration _Configuration;
- /// <summary>
- ///
- /// </summary>
- /// <param name="configuration">注入或者配置文件的接口对象</param>
- public Startup(IConfiguration configuration)
- {
- this._Configuration = configuration;
- }
- // This method gets called by the runtime. Use this method to add services to the container.
- // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
- public void ConfigureServices(IServiceCollection services)
- {
- }
- // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder App, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- App.UseDeveloperExceptionPage();
- }
- //env.EnvironmentName = "Cus1"; // 设置自定义环境名称
- App.Run(async (context) =>
- {
- context.Response.ContentType = "text/plain;charset=utf-8"; // 防止 WriteAsync 方法输出中文乱码
- var msg = this._Configuration.GetValue<string>("hello");
- await context.Response.WriteAsync(msg, Encoding.UTF8);
- /*if (env.IsDevelopment())
- {
- await context.Response.WriteAsync("开发环境", Encoding.UTF8);
- }
- else if (env.IsProduction())
- {
- await context.Response.WriteAsync("运营环境", Encoding.UTF8);
- }
- else if (env.IsStaging())
- {
- await context.Response.WriteAsync("预发布环境", Encoding.UTF8);
- }
- else
- {
- if (env.IsEnvironment("Cus"))
- {
- await context.Response.WriteAsync("自定义环境: Cus", Encoding.UTF8);
- }
- else if (env.IsEnvironment("Cus1"))
- {
- await context.Response.WriteAsync("自定义环境: Cus1", Encoding.UTF8);
- }
- else
- {
- await context.Response.WriteAsync($"自定义环境: {env.EnvironmentName}", Encoding.UTF8);
- }
- }*/
- });
- }
- }
- }
然后我们在 appsettings.JSON 配置中, 新增一行: "hello": "appsettings.json", 如图:
F5 执行, 浏览器输出了 appsettings.JSON, 没问题
然后我们点一下 appsettings.JSON 文件前面的箭头, 会发现里面还有个 appsettings.Development.JSON 文件, 如图:
打开 appsettings.Development.JSON 文件, 在里面和配置 appsettings.JSON 一样, 添加个 hello 配置, 把值设置为 appsettings.Development.JSON, 如图:
然后再 F5 运行, 浏览器输出的就是 appsettings.Development.JSON 啦~, 这里的原因, 前面章节已经讲过, 这里不再称述.
我们新建个 appsettings.Cus.JSON 文件, 然后在里面加个 hello 配置, 值为 appsettings.Cus.JSON, 如图:
然后再修改运行环境为 Cus, 修改方法参考上面, 然后 F5 运行, 浏览器就输出 appsettings.Cus.JSON 啦~
到这里, 这一节就结束了, 到目前为止, 我们对. Net Core MVC 的环境和配置文件切换, 有了一个比较熟悉的了解了, 可以实际运用一下了, 再也不用担心不同环境不同的配置搞混了
我们再下一节讲 ASP.NET Core MVC 的路由
如果在使用. Net Core 遇到任何问题, 都加群进行讨论, 群号: 1 群: 225982985. 2 群: 726648662. 3 群: 654015377
本节代码: 链接: https://pan.baidu.com/s/1r98sWbVdM6UMtzUEgztY2A 提取码: 6e35
来源: https://www.cnblogs.com/klwen/p/11004655.html