日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘

發布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

1、寫這篇文章的初衷

  有好多朋友反饋看不懂我寫的開源的一個練手項目(GitHub:https://github.com/AjuPrince/Aju.Carefree)也有好多人都希望我能寫一些簡單的入門的文章,記得前幾天在群里有人問為什么 .Net Core 能跨平臺,在聊天中發現也有好多人在已經在使用 .Net Core ,但問他們的時候他們也表示不知道,還有好多人說既然 .Net Core 能跨平臺了為啥還在Window上需要IIS來部署呢?因此我想通過這篇文章來試著解釋下。(廢話不多說,下面進入正題。)

2、概述

  在Asp.Net Core 之前,Asp.Net Framework 應用程序由IIS加載,Web應用程序的入口由InetMgr.exe創建并調用托管,在初始化過程中觸發HttpApplication.Application_Start()事件,我們第一次執行代碼的機會是處理Application_StartGlobal.asax中的事件,但在Asp.Net Core中,Global.asax文件找不見了,被新的初始化過程所替換(回到了熟悉的控制臺應用程序)

  

  看上圖的我圈住的地方,證明我沒有吹牛皮。那就有好多人問了,既然是控制臺應用程序,那為啥我沒找見.exe 程序呢?

  

  以圖來說明,好像正的沒有。很肯定的說是真的沒有。這是為什么呢?(容我慢慢道來)

3、Program.cs

public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }

既然通過上面我們知道了.Net Core 應用程序是控制臺應用程序,那么我們就很熟悉了,代碼啟動后肯定會找Main()函數(方法)(其實這就是ASP.NET Core應用程序開發的根本變化),所有的ASP.NET托管庫都是從Program開始執行。

  下面我們來解析下Main->CreateWebHostBuilder()方法

  1、那先來看看CreateDefaultBuilder 方法  

????

?從圖中圈出來的注釋來看,其實已經說的很明白了,我將試著解釋下:使用預先配置的缺省值初始化WebHostBuilder類的新實例。(建議大家去看源碼)搞懂這個東西就會理解 .Net Core 跨平臺的秘密了,我簡單的說下(算是給大家起個頭,后面希望大家都去看看源碼(.Net Core 是開源的,在GitHub上能找到)),這里方法里其實初始化了一個Kestrel Web服務器(至于什么是Kestrel 服務器 后面有機會再介紹),在這個方法里默認使用系統配置文件 appsettings.json (注意,熟悉Asp.Net 的朋友們都知道有個Web.Config 配置文件,不好意思的說,在 .Net Core 中去掉了)等等。我覺得最主要的就是這兩個。

  可以這么說是有了Kestrel Web服務器才使得.Net Core 能真正的跨平臺。

? ? ? ?從上圖的代碼中可以看到,初始化完了系統默認的配置之后,啟動了Startup類,那么下面我們就來看看這類

4、Startup 類 

public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } // 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(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(); } }

????這是一個干凈的(新建的Web程序)

  從頭來看,我們發現了一個很熟悉的方法——>構造函數,再仔細一看(原來是構造函數注入,這里就不在說IOC了,默認大家都知道。)

 ? ?接下來看看ConfigureServices和Configure 這兩個方法

  1、ConfigureServices

 

  通過注釋可以得到(此方法由運行時調用。使用此方法向容器添加服務。)而且可以看到這個方法0個引用,更加的說明一點注釋是不會騙人的。

  這個方法的作用就是向IServiceCollection 這個集合里添加服務,也就是說以后系統中想要什么服務(比如MVC、Session、Cookie。。。)都添加到這個集合中。在F12看看IServiceCollection這個集合

  

  可以看到這個集合的命名空間,可以說明一點(DI在.NET Core里面被提到了一個非常重要的位置)

? ? 2、Configure 方法

  

  通過注釋(此方法由運行時調用。使用此方法配置HTTP請求管道。)可以了解到 這個異常之重要,此方法用于指定中間件以什么樣的形式響應HTTP請求,網上文章都說的親求處理管道(中間件)就是在這個方法里配置的。

5、總結

 ? ? ? ? ??

  借用網上的一張圖來總結。

  • ASP.NET Core在運行時首先加載Program類下面的Main方法,在Main方法中指定托管服務器,并調用Startup類中的Configure和ConfigureServices方法等完成初始化

  • 在ASP.NET Core中 HTTP請求是以中間件管道的形式進行處理

  • .Net Core 應用程序不需要用IIS進行托管,所以相比傳統Asp.Net來說性能更高效也更加靈活

  • .Net Core 跨平臺在于維護了自己的內部Web服務器(Kestrel?)

? ? 本篇文章只為了讓大家入門,更深入的東西后面有時間再深入,如有不合適的地方請反饋,本人將馬上修改!

  如果覺得還不錯,還請大家點個推薦(哈哈)!

?資料:

?https://github.com/dotnet/corefx(.Net Core 源碼)

https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-2.2?view=aspnetcore-3.0(官方文檔)


總結

以上是生活随笔為你收集整理的小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。