2023-06-30 14:08:32來源:今日頭條
整體上可以分為以下幾個模塊:
應(yīng)用程序托管模塊應(yīng)用程序托管模塊是入口點,主要負責(zé)創(chuàng)建 Host、解析 ConfigureServices 和 Configure 方法,創(chuàng)建 Pipeline 等。Host 是應(yīng)用程序的主機運行時環(huán)境,它提供了一些配置和管理應(yīng)用程序的基礎(chǔ)功能,例如配置文件的讀取、依賴注入容器的初始化、中間件的注冊和加載等。ConfigureServices 方法主要用于注冊依賴注入服務(wù);Configure 方法則用于配置中間件管道,在這里注冊各種 Middleware 和 Endpoint。
HTTP 模塊HTTP 模塊是 ASP.NET Core 的核心模塊,它負責(zé)處理 HTTP 請求并生成 HTTP 響應(yīng)。該模塊由以下三個子模塊組成:HttpContext、HttpRequest、HttpResponse。
【資料圖】
中間件管道是 ASP.NET Core 處理請求的核心部分,它通過鏈?zhǔn)秸{(diào)用各種中間件來實現(xiàn) HTTP 請求處理。每個 Middleware 可以選擇把請求傳遞給下一個 Middleware 或者終止請求。中間件的注冊和執(zhí)行通過 IApplicationBuilder 接口進行控制。管道的執(zhí)行流程是從第一個中間件開始執(zhí)行,如果當(dāng)前中間件沒有終止請求,則使用 Next() 方法將請求傳遞給下一個中間件,直到所有的中間件都執(zhí)行完畢并返回響應(yīng)結(jié)果。
路由模塊路由模塊負責(zé) URL 路由和 Endpoint 的匹配工作。在路由模塊中,ASP.NET Core 提供了豐富的路由模板語法,用于構(gòu)建 RESTful Web API 和 MVC 應(yīng)用程序。路由模塊通常涉及到以下幾個類:Route、RouteTemplate、RouteData、RouteContext。
ActionInvoker 模塊ActionInvoker 模塊是 MVC/Web API 中用于調(diào)用 Controller Action 方法的核心模塊。該模塊根據(jù)路由匹配的結(jié)果獲取對應(yīng)的 ActionDescriptor,然后通過反射調(diào)用 Controller 對應(yīng)的 Action 方法,并自動將參數(shù)綁定到 Controller Action 方法中。
視圖引擎模塊視圖引擎模塊用于 MVC 中的視圖渲染工作,它的主要職責(zé)是根據(jù) Controller Action 指定的視圖名稱和模型數(shù)據(jù),渲染出對應(yīng)的 HTML 內(nèi)容。視圖引擎分為兩種:Razor 視圖引擎和自定義視圖引擎。
在 ASP.NET Core 的源碼設(shè)計中,框架采用了面向?qū)ο缶幊痰乃枷耄媒涌?、抽象類等方式實現(xiàn)模塊之間的松耦合關(guān)系,方便擴展和替換。設(shè)計中也使用了依賴注入、工廠等設(shè)計模式來進行對象管理和創(chuàng)建。總體上,ASP.NET Core 的源碼設(shè)計非常精巧,充分體現(xiàn)了 .NET 生態(tài)系統(tǒng)的優(yōu)秀品質(zhì)。
以下是一個 ASP.NET Core 運行時的示例代碼,以說明運行時如何工作:
using System;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Http;namespace MyNamespace{ public class Startup { // Configure services for DI container public void ConfigureServices(IServiceCollection services) { services.AddControllers(); } // Configure HTTP request pipeline 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!"); }); endpoints.MapControllers(); }); } }}
在上述示例中,Startup 類是應(yīng)用程序托管模塊。ConfigureServices 方法用于注冊依賴注入服務(wù),這里使用 AddControllers() 方法來添加 MVC 控制器。Configure 方法則負責(zé)配置中間件管道,首先判斷當(dāng)前是否在開發(fā)環(huán)境中,如果是,則調(diào)用 UseDeveloperExceptionPage() 中間件來為開發(fā)者提供異常信息的友好顯示;接著使用 UseRouting() 方法啟用 Routing,接下來使用 UseEndpoints() 方法來配置請求終結(jié)點,其中 MapGet() 方法配置了一個 GET 請求終結(jié)點“/”,返回“Hello World!”;MapControllers() 方法則將所有控制器動作方法映射到當(dāng)前應(yīng)用程序。
官方文檔:https://learn.microsoft.com/en-us/aspnet/core/introduction-to-aspnet-core?view=aspnetcore-7.0。
關(guān)鍵詞:
整體上可以分為以下幾個模塊:應(yīng)用程序托管模塊應(yīng)用程序托管模塊是入口
關(guān)于調(diào)整2023年度住房公積金繳存基數(shù)和月繳存額上、下限的方案各省直繳
生成式人工智能可以為新產(chǎn)品、企業(yè)、行業(yè)甚至新經(jīng)濟提供信息。但它與傳
將計算機視覺融入AR和VR,對于創(chuàng)造完美融合物理和數(shù)字領(lǐng)域的沉浸式體驗
中科院計算所的處理器芯片全國重點實驗室及其合作單位,用AI技術(shù)設(shè)計出
原諒我后知后覺,相信閱讀文章的小伙伴有一部分可能已經(jīng)安裝了這個插件
據(jù)TheHackerNews6月29日消息,一款基于Android的手機監(jiān)控應(yīng)用程序LetMe
本文轉(zhuǎn)自:人民網(wǎng)-廣西頻道廣西金融行業(yè)再迎盛事,6月28日晚,2023廣西
總臺央視記者朱繼華張偉6月28日14時30分,全球首臺16兆瓦海上風(fēng)電機組
起亞在國內(nèi)存在感已經(jīng)越來越低,進口車型更是小眾的代名詞。近日,起亞
2023長春中考成績幾號幾點出來?2023長春中考成績公布時間為7月13日,具
與傳統(tǒng)汽車相比,自動駕駛汽車更注重車輛能否將乘客安全地送達目的地這
在大家不斷升級迭代自家大模型的時候,LLM(大語言模型)對上下文窗口
通常,軟件工程師在處理系統(tǒng)設(shè)計任務(wù)時遇到困難的主要原因有三個:系統(tǒng)
符堯(yao fu@ed ac uk),愛丁堡大學(xué)(UniversityofEdinburgh)博士生,