ASP.Net Core 2.2 MVC入門到基本使用系列 (五)

本教程會對基本的.Net Core 進行一個大概的且不會太深刻的講解, 在您看完本系列以後, 能基本甚至熟練的使用.Net Core進行Web開發, 感覺到.Net Core的魅力.數據庫

本教程知識點大致分爲如下幾個階段json

  • ASP.Net Core MVC基礎知識
  1. Startup基本配置和理解
  2. Controller使用
  3. Razor視圖
  4. 傳統視圖
  5. Model Validation (基本用法)
  6. 一點點的Vue (教程使用Vue配合)
  • SqlSugar ORM (進行數據庫交互)
  • Entity Framework  Core(基本介紹使用)
  • 受權和身份驗證(MVC的, WebApi的不進行介紹)
  • 安全性
  • 測試 / 單元測試
  • 性能基本優化
  • 日誌功能
  • CI/CD
  • Windows部署
  • Linux部署

上一節咱們介紹了中間件的基本使用, 這一節咱們講一講.Net Core的環境設置, 以及根據不一樣的環境加載不一樣的配置信息瀏覽器

PS: 因爲最近一直比較忙, 一直沒抽時間更新這個系列, 最近居多的博友催我, 因此繼續擠擠時間更新這個系列, 感謝你們的對本系列教程的喜歡和支持.安全

在實際開發中, 咱們的系統每每會是至少兩個以上的運行環境, 最基本的就是, 開發環境和運營環境, 體系完整的公司, 還會有測試環境, 預發佈環境, 和一些自定義環境等等, 這些環境使用的配置或是一些參數確定是不同的, 咱們不可能爲一個環境準備一份代碼, 咱們能夠經過環境配置, 和 一些 if 判斷, 就能夠作到環境的自動切換, 下面就仔細說說.app

咱們先經過默認的.Net Core MVC設置, 感覺一下. 之前的代碼找不到了, 新建一個空的.Net Core MVC項目吧, 代碼後面會上傳到百度雲, 提供下載. async

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

相關文章
相關標籤/搜索