??前言
本文是《.Net Core進階編程課程》教程專欄的導航站(點擊鏈接,跳轉(zhuǎn)到專欄主頁,歡迎訂閱,持續(xù)更新…)
專欄介紹:通過源碼實例來講解Asp.Net Core進階知識點,讓大家完全掌握每一個知識點。
專欄適用于人群:Web后端開發(fā)人員
————————————————
本課程內(nèi)容:
1、動態(tài)Web API背景
2、動態(tài)Web API實現(xiàn)原理
3、識別自定義控制器
一、動態(tài)Web API背景
一說到動態(tài)Web API,很多人都是因為使用ABP框架了解的。在講解如何實現(xiàn)之前,我們了解下動態(tài)Web API的好處!
在DDD框架中,領(lǐng)域?qū)雍蛻?yīng)用層是核心、所有業(yè)務(wù)處理與邏輯全部放在這兩個層,而API層是只是薄薄的一層。
比如:DDD教程里的API代碼,都是只有2行代碼。
這樣就存在2個問題:
1、每一個對外提供的API接口,我們都需要編寫,這些都很機械化的代碼。
2、EletricAuthorize權(quán)限驗證,其實是屬于應(yīng)用層的,但這邊被放在API層。
而通過動態(tài)Web API,可以減少代碼量、提升工作效率等諸多好處。
二、動態(tài)Web API實現(xiàn)原理
2.1 應(yīng)用程序部件
我們之所以可以實現(xiàn)動態(tài)Web API,要歸功于Asp.net Core為我們提供的:應(yīng)用程序部件。
在Asp.Net Core架構(gòu)里,MVC控制器、視圖組件、Razor Pages、Razor 視圖、標記幫助程序(Tag Helpers)等都是一個獨立的功能組件,它允許我們通過發(fā)現(xiàn)并加載應(yīng)用程序中的特定功能組件。
比如:Web API只需加載MVC控制器、MVC架構(gòu)的程序需要加載MVC控制器、視圖組件。
比如官方文檔里示例里,就是通過加載外部的DLL庫,來加載控制器。
官方文檔地址:https://learn.microsoft.com/zh-cn/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-8.0
2.2 獨立控制器項目示例
下面用一個示例來演示下,如何使用。
2.2.1 新建Web API項目
項目名稱:Electric.DynamicWebAPI
為了后續(xù)方便調(diào)試:勾選啟用OpenAPI,框架版本:這里選擇.Net 7.0(這里可以根據(jù)需求自行選擇)。
添加后的目錄:
2.2.2 新建控制器項目
選擇類庫項目
項目名稱:Electric.Controller
框架:.Net 7.0
添加后的目錄:
2.2.3 新增控制器
在項目Electric.Controller,新增控制器:TestController。
TestController代碼:
using Microsoft.AspNetCore.Mvc;
namespace Electric.Controller
{
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
[HttpGet]
public string GetName()
{
return "GetName";
}
}
}
2.2.4 編譯項目Electric.Controller
編譯后把dll拷貝至 Electric.DynamicWebAPI項目bin目錄下。
2.2.5 Electric.DynamicWebAPI加載控制器
在Program.cs加載程序集dll。
當然了,如果Electric.DynamicWebAPI如果引用了項目TestController,Asp.Net Core框架會默認掃描所有控制器,就不需要添加上面的代碼。
//加載控制器
var assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "Electric.Controller.dll");
builder.Services.AddControllers().AddApplicationPart(assembly);
2.2.6 運行項目
運行項目后,我們就可以看到控制器:TestController,已經(jīng)被加載了。
2.3 ApplicationPartManager
通過官方文檔和上面的演示,知道Asp.Net Core為我們提供了ApplicationPartManager,來方便我們根據(jù)需求來加載各種組件,比如控制器組件、視圖組件等。
官方文檔也告訴我們,通過AddApplicationPart和ConfigureApplicationPartManager,都可以實現(xiàn)加載組件。
3、識別自定義控制器
3.1 問題
看完上面的例子,可能會有很多人會產(chǎn)生一個問題:你定義的控制器,是繼承了ControllerBase,Asp.Net Core可以自動識別,但是我們在DDD框架中,編寫的可是應(yīng)用服務(wù),不會去繼承ControllerBase。
3.2 檢查應(yīng)用程序部件
針對上面的問題,我們就需要用到:檢查應(yīng)用程序部件。
Asp.net Core也為我們提供了檢查應(yīng)用程序部件的方法,通過這些功能提供程序,我們就可以告訴
Asp.net Core哪一個是控制器。
3.3 ApplicationPartManager 定義
我們通過ApplicationPartManager的源碼定義看,我們就可以很清楚的知道。
我們要實現(xiàn)動態(tài)API,只需兩個步驟:
1、為ApplicationParts加載程序集資源;
2、為FeatureProviders添加檢查應(yīng)用程序部件的方法,告訴Asp.net Core哪一個是控制器。
四、最后
【.Net動態(tài)Web API】背景與實現(xiàn)原理就介紹到這邊啦!
下一個課程講解:如何實現(xiàn)動態(tài)控制器!
這個系列預(yù)計一天一篇文章,想要學習的可以關(guān)注起來!
文章會持續(xù)更新,大家有想要了解的功能點或者話題,可以在評論區(qū)告訴我!文章來源:http://www.zghlxwxcb.cn/news/detail-855193.html
【本課程源碼下載鏈接】加我:xgbbwj文章來源地址http://www.zghlxwxcb.cn/news/detail-855193.html
到了這里,關(guān)于【.Net動態(tài)Web API】背景與實現(xiàn)原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!