最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.Net?Core?MVC基礎(chǔ)系列之環(huán)境設(shè)置

 更新時(shí)間:2022年02月13日 10:18:35   作者:丶亡我之心不死  
這篇文章介紹了ASP.Net?Core?MVC環(huán)境設(shè)置的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

上一節(jié)我們介紹了中間件的基本使用, 這一節(jié)我們講一講.Net Core的環(huán)境設(shè)置, 以及根據(jù)不同的環(huán)境加載不同的配置信息

PS: 由于最近一直比較忙, 一直沒(méi)抽時(shí)間更新這個(gè)系列, 最近居多的博友催我, 所以繼續(xù)擠擠時(shí)間更新這個(gè)系列, 感謝大家的對(duì)本系列教程的喜歡和支持.

在實(shí)際開(kāi)發(fā)中, 我們的系統(tǒng)往往會(huì)是至少兩個(gè)以上的運(yùn)行環(huán)境, 最基本的就是, 開(kāi)發(fā)環(huán)境和運(yùn)營(yíng)環(huán)境, 體系完整的公司, 還會(huì)有測(cè)試環(huán)境, 預(yù)發(fā)布環(huán)境, 和一些自定義環(huán)境等等, 這些環(huán)境使用的配置或是一些參數(shù)肯定是不一樣的, 我們不可能為一個(gè)環(huán)境準(zhǔn)備一份代碼, 我們可以通過(guò)環(huán)境配置, 和 一些 if 判斷, 就可以做到環(huán)境的自動(dòng)切換, 下面就仔細(xì)說(shuō)說(shuō).

我們先通過(guò)默認(rèn)的.Net Core MVC設(shè)置, 感受一下. 以前的代碼找不到了, 新建一個(gè)空的.Net Core MVC項(xiàng)目吧, 代碼后面會(huì)提供下載.

PS: IDE我已經(jīng)使用VS2019

建好之后, 我們打開(kāi)Startup.cs代碼文件, 看Configure方法, 我相信, 有的博友已經(jīng)發(fā)現(xiàn)了, 里面的第一行代碼是個(gè)if, 意思就是判斷當(dāng)前環(huán)境是不是開(kāi)發(fā)環(huán)境, 看單詞的字面意思也是這個(gè)意思, 所以學(xué)好英文對(duì)開(kāi)發(fā)程序有很大的buff加成啊~~~

對(duì)于if里的是什么, 上一節(jié)已經(jīng)講過(guò), 不再稱(chēng)述.

由此我們得出, 控制環(huán)境和判斷環(huán)境, 都是在Configure方法中, 注入的IHostingEnvironment接口對(duì)象進(jìn)行的. 這里我說(shuō)一下, 系統(tǒng)默認(rèn)提供的幾個(gè)判斷環(huán)境的方法. 我們使用env.Is, VS的智能提示, 可以得到下面四個(gè)方法, 如圖:

  • IsDevelopment方法大家已經(jīng)知道了, 判斷當(dāng)前是不是開(kāi)發(fā)環(huán)境.
  • IsProduction方法, 判斷當(dāng)前是不是運(yùn)營(yíng)(正式)環(huán)境
  • IsStaging方法, 判斷當(dāng)前是不是預(yù)運(yùn)行環(huán)境
  • IsEnvironment方法, 根據(jù)傳入的環(huán)境名稱(chēng), 判斷是不是當(dāng)前環(huán)境類(lèi)型 (用于自定義環(huán)境判斷)

我們修改一下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("開(kāi)發(fā)環(huán)境", Encoding.UTF8);
        }
        else if (env.IsProduction())
        {
            await context.Response.WriteAsync("運(yùn)營(yíng)環(huán)境", Encoding.UTF8);
        }
        else if (env.IsStaging())
        {
            await context.Response.WriteAsync("預(yù)發(fā)布環(huán)境", Encoding.UTF8);
        }
        else
        {
            await context.Response.WriteAsync("自定義環(huán)境", Encoding.UTF8);
        }
    });
}

然后F5運(yùn)行, 瀏覽器會(huì)不出意外的輸出: "開(kāi)發(fā)環(huán)境"

沒(méi)毛病, 我們修改一下編譯環(huán)境, 把Debug修改為Release, 然后生成, 如圖:

然后生成項(xiàng)目, 生成成功之后, 到項(xiàng)目的bin/Release/netcoreapp2.2目錄下, 打開(kāi)CMD, 執(zhí)行dotnetUnit1.dll命令, 就會(huì)是這樣的, 如圖:

我們?cè)跒g覽器輸入http://localhost:5000/回車(chē), 不出意外, 會(huì)輸出: 運(yùn)營(yíng)環(huán)境 四個(gè)大字.

以上的流程, 就演示了最基本的開(kāi)發(fā)環(huán)境和運(yùn)營(yíng)環(huán)境的配置和判斷. 下面我們演示自定義環(huán)境. 我們接著修改代碼, 為當(dāng)前環(huán)境設(shè)置個(gè)名字, 代碼如下

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
 
    env.EnvironmentName = "Cus";    //設(shè)置自定義環(huán)境名稱(chēng)
 
    app.Run(async (context) =>
    {
        context.Response.ContentType = "text/plain;charset=utf-8";  //防止WriteAsync方法輸出中文亂碼
        if (env.IsDevelopment())
        {
            await context.Response.WriteAsync("開(kāi)發(fā)環(huán)境", Encoding.UTF8);
        }
        else if (env.IsProduction())
        {
            await context.Response.WriteAsync("運(yùn)營(yíng)環(huán)境", Encoding.UTF8);
        }
        else if (env.IsStaging())
        {
            await context.Response.WriteAsync("預(yù)發(fā)布環(huán)境", Encoding.UTF8);
        }
        else
        {
            await context.Response.WriteAsync("自定義環(huán)境", Encoding.UTF8);
        }
    });
}

F5運(yùn)行項(xiàng)目, 瀏覽器毫不意外的輸出了: 自定義環(huán)境

如果我們要輸出預(yù)發(fā)布環(huán)境的話(huà), 只需要把EnvironmentName 屬性的值改成 "Staging" 即可, 這里不做演示, 自行嘗試, 設(shè)置代碼如下:

env.EnvironmentName = "Staging"; //設(shè)置為預(yù)發(fā)布環(huán)境

發(fā)設(shè)置為Staging和其它值的區(qū)別就是系統(tǒng)系統(tǒng)了一個(gè)IsStaging方法

為了更加直觀(guān)的演示自定義環(huán)境, 我們把else改一下, 改完之后的代碼如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
 
    env.EnvironmentName = "Cus";    //設(shè)置自定義環(huán)境名稱(chēng)
 
    app.Run(async (context) =>
    {
        context.Response.ContentType = "text/plain;charset=utf-8";  //防止WriteAsync方法輸出中文亂碼
        if (env.IsDevelopment())
        {
            await context.Response.WriteAsync("開(kāi)發(fā)環(huán)境", Encoding.UTF8);
        }
        else if (env.IsProduction())
        {
            await context.Response.WriteAsync("運(yùn)營(yíng)環(huán)境", Encoding.UTF8);
        }
        else if (env.IsStaging())
        {
            await context.Response.WriteAsync("預(yù)發(fā)布環(huán)境", Encoding.UTF8);
        }
        else
        {
            if (env.IsEnvironment("Cus"))
            {
                await context.Response.WriteAsync("自定義環(huán)境: Cus", Encoding.UTF8);
            }
            else if (env.IsEnvironment("Cus1"))
            {
                await context.Response.WriteAsync("自定義環(huán)境: Cus1", Encoding.UTF8);
            }
            else
            {
                await context.Response.WriteAsync($"自定義環(huán)境: {env.EnvironmentName}", Encoding.UTF8);
            }
        }
    });
}

具體運(yùn)行效果和預(yù)計(jì)的一樣, 會(huì)輸出對(duì)應(yīng)的自定義環(huán)境

但是實(shí)際開(kāi)發(fā)過(guò)程中, 我不推薦在代碼里面修改當(dāng)前環(huán)境, 而且通過(guò)項(xiàng)目的環(huán)境變量設(shè)置對(duì)應(yīng)的環(huán)境, 具體修改方法如下

1: 點(diǎn)開(kāi)Properties

2: 打開(kāi)launchSettings.json

3: 修改ASPNETCORE_ENVIRONMENT的值.

我們修改EnvironmentName屬性的代碼刪掉, 修改launchSettings.json的配置為Cus, 運(yùn)行是什么效果, 修改后的效果如圖

沒(méi)出任何以外, 瀏覽器輸出的是自定義環(huán)境: Cus, 改成其它的值, 就輸入對(duì)應(yīng)的自定義環(huán)境, 修改為Development就是開(kāi)發(fā)環(huán)境,Staging就是預(yù)運(yùn)營(yíng)環(huán)境,Production就是運(yùn)營(yíng)環(huán)境

可能有人就要問(wèn)了, 你只修改了上面的ASPNETCORE_ENVIRONMENT, 下面還有一個(gè)ASPNETCORE_ENVIRONMENT配置, 沒(méi)修改, 怎么也可以. 別急, 馬上就說(shuō)明

.Net Core MVC程序, 提供了兩種托管方式, 一種是通過(guò)IIS托管, 一種是自托管, 我們剛剛修改的環(huán)境, 只修改了IIS托管模式, VS默認(rèn)又是IIS調(diào)試, 所以, 會(huì)有效果

如果使用自托管模式調(diào)試或發(fā)布運(yùn)行程序, 則修改下面的Unit1節(jié)點(diǎn)的配置即可. 當(dāng)然, VS也提供了調(diào)試方式, 切換方法, 點(diǎn)擊運(yùn)行模式即可, 如圖:

選擇Unit1, 就是自托管模式啦~ , 然后F5運(yùn)行, 瀏覽器輸出的依然是開(kāi)發(fā)環(huán)境, 雖然IIS配置的是Cus環(huán)境, 但是Unit1自托管沒(méi)有修改, 我們修改一下Unit1的環(huán)境試試, 這里我修改為Cus100, 然后選擇Unit1調(diào)試, F5運(yùn)行, 瀏覽器輸出的就是

沒(méi)有任何問(wèn)題

如果你覺(jué)得這種修改方式麻煩, 還有一種界面修改方法

我們?cè)陧?xiàng)目上右鍵 --> 屬性 --> 調(diào)試, 就能看到對(duì)應(yīng)的配置了, 如圖:

當(dāng)前是自托管模式, 我修改為Cus100, 這里顯示的就是Cus100, 點(diǎn)擊上面的配置文件, 還可以修改不同的托管模式的配置:

這里就不做演示了, 修改效果和直接修改launchSettings.json文件是一樣的

PS: 我們已經(jīng)把兩種托管模式的環(huán)境都設(shè)置為了默認(rèn)的Development, 開(kāi)發(fā)環(huán)境.

上面已經(jīng)講完了環(huán)境的配置和切換, 下面講講根據(jù)不同的環(huán)境, 自動(dòng)讀取不同的配置文件, 我們先修改一下代碼, 讓輸入的文件是從appsettings.json配置里面讀取的, 修改后的Startup類(lèi)代碼如下:

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">注入或者配置文件的接口對(duì)象</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";    //設(shè)置自定義環(huán)境名稱(chēng)
 
            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("開(kāi)發(fā)環(huán)境", Encoding.UTF8);
                }
                else if (env.IsProduction())
                {
                    await context.Response.WriteAsync("運(yùn)營(yíng)環(huán)境", Encoding.UTF8);
                }
                else if (env.IsStaging())
                {
                    await context.Response.WriteAsync("預(yù)發(fā)布環(huán)境", Encoding.UTF8);
                }
                else
                {
                    if (env.IsEnvironment("Cus"))
                    {
                        await context.Response.WriteAsync("自定義環(huán)境: Cus", Encoding.UTF8);
                    }
                    else if (env.IsEnvironment("Cus1"))
                    {
                        await context.Response.WriteAsync("自定義環(huán)境: Cus1", Encoding.UTF8);
                    }
                    else
                    {
                        await context.Response.WriteAsync($"自定義環(huán)境: {env.EnvironmentName}", Encoding.UTF8);
                    }
                }*/
            });
        }
    }
}

然后我們?cè)赼ppsettings.json配置中, 新增一行:"hello": "appsettings.json", 如圖:

F5執(zhí)行, 瀏覽器輸出了appsettings.json, 沒(méi)問(wèn)題

然后我們點(diǎn)一下appsettings.json文件前面的箭頭, 會(huì)發(fā)現(xiàn)里面還有個(gè)appsettings.Development.json文件, 如圖:

打開(kāi)appsettings.Development.json文件, 在里面和配置appsettings.json一樣, 添加個(gè)hello配置, 把值設(shè)置為appsettings.Development.json, 如圖:

然后再F5運(yùn)行, 瀏覽器輸出的就是appsettings.Development.json啦~, 這里的原因, 前面章節(jié)已經(jīng)講過(guò), 這里不再稱(chēng)述.

我們新建個(gè)appsettings.Cus.json文件, 然后在里面加個(gè)hello配置, 值為appsettings.Cus.json, 如圖:

然后再修改運(yùn)行環(huán)境為Cus, 修改方法參考上面, 然后F5運(yùn)行, 瀏覽器就輸出appsettings.Cus.json啦~

到這里, 這一節(jié)就結(jié)束了, 到目前為止, 我們對(duì).Net Core MVC的環(huán)境和配置文件切換, 有了一個(gè)比較熟悉的了解了, 可以實(shí)際運(yùn)用一下了, 再也不用擔(dān)心不同環(huán)境不同的配置搞混了

本節(jié)代碼:下載

到此這篇關(guān)于ASP.Net Core MVC基礎(chǔ)系列之環(huán)境設(shè)置的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

娄底市| 永州市| 库伦旗| 山东省| 新疆| 宣化县| 宣城市| 和平县| 桂平市| 社旗县| 毕节市| 鄄城县| 阿克陶县| 乐都县| 郁南县| 宜兴市| 蓝田县| 牡丹江市| 内丘县| 东山县| 罗甸县| 崇义县| 靖远县| 丹东市| 于都县| 泾源县| 女性| 漳平市| 司法| 茶陵县| 凭祥市| 恩施市| 崇仁县| 博野县| 天津市| 阳信县| 安国市| 将乐县| 乡宁县| 临沧市| 阳信县|