ASP.NET Core 學習筆記 第一篇 ASP.NET Core初探


前言

因為工作原因博客斷斷續續更新,其實在很早以前就有想法做一套關於ASP.NET CORE整體學習度路線,整體來說國內的環境的.NET生態環境還是相對比較嚴峻的,但是干一行愛一行,還是希望更多人加入.NET的大環境當中。所以萌生了做一篇關於.NET CORE 學習的學習筆記,借着今天小酌幾杯的機會,把這個想法踐行一下。

為什么學習 ASP.NET Core程序

數百萬開發人員在使用ASP.NET創建Web應用。而ASP.NET Core 是對ASP.NET 的重新設計,在結構上做了更改,產生了更精簡、更模塊化的框架。
ASP.NET Core 具有如下有點:

  • 生成 Web UI 和 Web API 的統一場景。
  • 針對可測試性進行構建。
  • Razor Pages 可以使基於頁面的編碼方式更簡單高效。
  • Blazor 允許在瀏覽器中使用 C# 和 JavaScript。 共享全部使用 .NET 編寫的服務器端和客戶端應用邏輯。
  • 能夠在 Windows、macOS 和 Linux 上進行開發和運行。
  • 開放源代碼和以社區為中心。
  • 集成新式客戶端框架和開發工作流。
  • 支持使用 gRPC 托管遠程過程調用 (RPC)。
  • 基於環境的雲就緒配置系統。
  • 內置依賴項注入。
  • 輕型的高性能模塊化 HTTP 請求管道。
  • 能夠托管於以下各項:
    1.Kestrel
    2.IIS
    3.HTTP.sys
    4.Nginx
    5.APache
    6.Docker
  • 並行版本控制
  • 簡化新式 Web 開發的工具。

ASP.NET Core 和 ASP.NET 比較

ASP.NET Core ASP.NET
針對 Windows、macOS 或 Linux 進行生成 針對 Windows 進行生成
Razor Pages 是在 ASP.NET Core 2.x 及更高版本中創建 Web UI 時建議使用的方法。 另請參閱 MVC、Web API 和 SignalR。 使用 Web Forms、SignalR、MVC、Web API、WebHook 或網頁
每個計算機多個版本 每個計算機一個版
使用 C# 或 F# 通過 Visual Studio、Visual Studio for Mac 或 Visual Studio Code 進行開發 使用 C#、VB 或 F# 通過 Visual Studio 進行開發
比 ASP.NET 性能更高 良好的性能
使用 .NET Core 運行時 使用 .NET Framework 運行時

開發環境

安裝.NET Core的開發環境,這里筆者用的是.NET 5.0 和VS 2019。下載地址:https://dotnet.microsoft.com/download 選擇自己的平台進行安裝。
image
這里簡單說下SDK和RunTime區別:

  • SDK包含Runtime,用於開發,
  • Runtime用於安裝運行。
    安裝完成運行dotnet --list -sdk查看安裝情況。
    image

新建項目

1.打開 VS2019,新建項目。
image

2.選擇ASP.NET Core API 應用,點擊下一步,然后創建項目。
image

3.此處選擇.NET 5.0 取消HTTPS勾選。
image

項目分析

1.整體分析

image

2.Startup類

Startup 類配置服務和應用請求管道:

  • 包括 ConfigureServices 方法以配置應用的服務。 服務是一個提供應用功能的可重用組件。 在 ConfigureServices 中注冊服務,並通過依賴關系注入 (DI) 或 ApplicationServices 在整個應用中使用服務。
  • 包括 Configure 方法以創建應用的請求處理管道。
public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyWebAPI", Version = "v1" });
            });
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyWebAPI v1"));
            }

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

在應用啟動時,ASP.NET Core 運行時會調用 ConfigureServices 和 Configure。

Startup構造函數注入配置IConfiguration。

ConfigureServices方法是把自己或者第三方的服務注入到容器當中(ASP.NET Core 內部包含一整套自己的依賴注入框架),使其在應用和configure方法中可用,服務通過依賴注入或ApplicationServices 進行解析。

Configure方法用於指定應用響應 HTTP 請求的方式。 可通過將中間件組件添加到 IApplicationBuilder 實例來配置請求管道。

ASP.NET Core 模板默認配置管道:

  • 開發人員異常頁
  • 異常處理程序
  • HTTP 嚴格傳輸安全性 (HSTS)
  • HTTPS 重定向
  • 靜態文件
  • ASP.NET Core MVC 和 Razor Pages

3.依賴關系注入(服務)

ASP.NET Core 有內置的依賴關系注入 (DI) 框架,可在應用中提供配置的服務。 例如,日志記錄組件就是一項服務。

4.中間件

中間件是一種裝配到應用管道以處理請求和響應的軟件。 每個組件:

  • 選擇是否將請求傳遞到管道中的下一個組件。
  • 可在管道中的下一個組件前后執行工作
    使用 RunMap 和 Use 擴展方法來配置請求委托。 可將一個單獨的請求委托並行指定為匿名方法(稱為並行中間件),或在可重用的類中對其進行定義。 這些可重用的類和並行匿名方法即為中間件,也叫中間件組件。 請求管道中的每個中間件組件負責調用管道中的下一個組件,或使管道短路。 當中間件短路時,它被稱為“終端中間件”,因為它阻止中間件進一步處理請求。
    中間件請求過程
    image
    每個委托均可在下一個委托前后執行操作。 應盡早在管道中調用異常處理委托,這樣它們就能捕獲在管道的后期階段發生的異常。

5.服務器

Kestrel服務器是默認跨平台 HTTP 服務器實現。 Kestrel 提供了最佳性能和內存利用率,但它沒有 HTTP.sys 中的某些高級功能。

IIS HTTP 服務器是 IIS 的進程內服務器。

Kestrel HTTP.sys
更好的性能和內存利用率。 端口共享
跨平台 內核模式 Windows 身份驗證。 Kestrel 僅支持用戶模式的身份驗證。
靈活性,它是獨立於操作系統進行開發和修補的。 通過隊列傳輸的快速代理
編程端口和 TLS 配置 直接文件傳輸
擴展性,允許 PPv2 等協議和備用傳輸。 響應緩存

6.路由

路由負責匹配傳入的 HTTP 請求,然后將這些請求發送到應用的可執行終結點。所有 ASP.NET Core 模板都包括生成的代碼中的路由。 路由在 Startup.Configure 中的中間件管道中進行注冊。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/", async context =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    });
}

7.錯誤處理

app.UseDeveloperExceptionPage置於中間件管道的前面部分,它能夠捕獲隨后中間件中拋出的未經處理的異常(這里用於開發環境檢測錯誤)。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   if (env.IsDevelopment())
   {
       app.UseDeveloperExceptionPage();
   }
   else
   {
       app.UseExceptionHandler("/Error");
       app.UseHsts();
   }

   app.UseHttpsRedirection();
   app.UseStaticFiles();

   app.UseRouting();

   app.UseAuthorization();

   app.UseEndpoints(endpoints =>
   {
       endpoints.MapRazorPages();
   });
}

后記

終於寫完了整個計划的第一篇,算是一個好的開始吧,畢竟心心念念這么久才邁出了第一步,希望以后自己堅持下去記錄自己的學習,然后能幫助一兩人,共同前行。最后祝賀大家中秋快樂!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM