欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core奇淫技巧之動態(tài)WebApi的實現(xiàn)

 更新時間:2020年08月14日 10:49:51   作者:曉晨Master  
這篇文章主要介紹了ASP.NET Core奇淫技巧之動態(tài)WebApi的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一.前言

接觸到動態(tài)WebApi(Dynamic Web API)這個詞的已有幾年,是從ABP框架里面接觸到的,當時便對ABP的這個技術(shù)很好奇,后面分析了一波,也嘗試過從ABP剝離一個出來作為獨立組件來使用,可是后來因與ABP依賴太多而放棄。十幾天前朋友 熊貓 將這部分代碼(我和他在搞事情)成功的從 ABP 中剝離出來并做了一個簡單Demo扔給我,經(jīng)過這么久(實在是太懶_)終于經(jīng)過一些修改、添加功能、封裝,現(xiàn)在已經(jīng)能作為一個獨立組件使用,項目開源在Github(https://github.com/dotnetauth/Panda.DynamicWebApi),希望覺得有用的朋友能給一個 Star 支持一下。

本文只講使用,不講原理,原理放到后面的文章中詳細介紹。

二.介紹

不管是傳統(tǒng)的三層架構(gòu)、 DDD 經(jīng)典四層架構(gòu)(DDD Lite),亦或是其他具有應用邏輯層(業(yè)務(wù)邏輯層)的架構(gòu),在Web應用程序開發(fā)當中 ,我們的業(yè)務(wù)邏輯最終都需要經(jīng)過 Web Api 來進行調(diào)用,這里我們可能會有一個重復的操作:編寫業(yè)務(wù)邏輯->編寫API調(diào)用業(yè)務(wù)邏輯,這種重復性的操作有沒有解決辦法呢,我們編寫完業(yè)務(wù)邏輯以后便給我們自動生成WebApi,答案當然是有的。

這里介紹一下本文的主角:Panda.DynamicWebApihttps://github.com/dotnetauth/Panda.DynamicWebApi)。源自于ABP的一個可獨立使用的,可自動為你的業(yè)務(wù)邏輯層生成 ASP.NET Core WebApi 層的開源組件。它生成的API符合Restful風格,可以根據(jù)符合條件的類來生成WebApi,由MVC框架直接調(diào)用邏輯,無性能問題,完美兼容Swagger來構(gòu)建API說明文檔。

三.使用

這里以 DDD 經(jīng)典四層架構(gòu)中的應用邏輯層來講解。

1.準備

(1)建立兩個項目一個是應用邏輯層類庫項目;一個是作為生成WebApi Host,ASP.NET Core WebApi項目

(2)編寫應用邏輯

定義一個應用邏輯接口,所有應用邏輯都應實現(xiàn)它:

public interface IApplicationService
{
}

定義一個學生管理邏輯接口,繼承應用邏輯接口

public interface IStudentAppService : IApplicationService
{
 /// <summary>
 /// 根據(jù)ID獲取學生
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 StudentOutput Get(int id);

 /// <summary>
 /// 獲取所有學生
 /// </summary>
 /// <returns></returns>
 List<StudentOutput> Get();

 /// <summary>
 /// 更新學生信息
 /// </summary>
 /// <param name="input"></param>
 void Update(UpdateStudentInput input);

 /// <summary>
 /// 更新學生年齡
 /// </summary>
 /// <param name="age"></param>
 void UpdateAge(int age);

 /// <summary>
 /// 根據(jù)ID刪除學生
 /// </summary>
 /// <param name="id"></param>
 void Delete(int id);

 /// <summary>
 /// 添加學生
 /// </summary>
 /// <param name="input"></param>
 void Create(CreateStudentInput input);
}

實現(xiàn)學生邏輯管理接口:

public class StudentAppService: IStudentAppService
{
 /// <summary>
 /// 根據(jù)ID獲取學生
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 [HttpGet("{id:int}")]
 public StudentOutput Get(int id)
 {
 return new StudentOutput() {Id = 1, Age = 18, Name = "張三"};
 }

 /// <summary>
 /// 獲取所有學生
 /// </summary>
 /// <returns></returns>
 public List<StudentOutput> Get()
 {
 return new List<StudentOutput>()
 {
  new StudentOutput(){Id = 1,Age = 18,Name = "張三"},
  new StudentOutput(){Id = 2,Age = 19,Name = "李四"}
 };
 }

 /// <summary>
 /// 更新學生信息
 /// </summary>
 /// <param name="input"></param>
 public void Update(UpdateStudentInput input)
 {
 throw new System.NotImplementedException();
 }

 /// <summary>
 /// 更新學生年齡
 /// </summary>
 /// <param name="age"></param>
 [HttpPatch("{id:int}/age")]
 public void UpdateAge(int age)
 {
 throw new System.NotImplementedException();
 }

 /// <summary>
 /// 根據(jù)ID刪除學生
 /// </summary>
 /// <param name="id"></param>
 [HttpDelete("{id:int}")]
 public void Delete(int id)
 {
 throw new System.NotImplementedException();
 }

 /// <summary>
 /// 添加學生
 /// </summary>
 /// <param name="input"></param>
 public void Create(CreateStudentInput input)
 {
 throw new System.NotImplementedException();
 }
}

(3)給 WebApi Host 項目配置 Swagger。

Install-Package Swashbuckle.AspNetCore -Version 4.0.1

Startup 中配置

public void ConfigureServices(IServiceCollection services)
{
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

 services.AddSwaggerGen(options =>
 {
 options.SwaggerDoc("v1", new Info { Title = "曉晨學生管理系統(tǒng) WebApi", Version = "v1" });

 options.DocInclusionPredicate((docName, description) => true);

 options.IncludeXmlComments(@"bin\Debug\netcoreapp2.2\Xc.StuMgr.WebApiHost.xml");
 options.IncludeXmlComments(@"bin\Debug\netcoreapp2.2\Xc.StuMgr.Application.xml");
 });
}

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

 app.UseSwagger();
 app.UseSwaggerUI(c =>
 {
 c.SwaggerEndpoint("/swagger/v1/swagger.json", "曉晨學生管理系統(tǒng) WebApi");
 });

 app.UseMvc();
}

運行則會直接看到默認的 ValuesController 的5個API。

2.動態(tài)WebApi

通過Nuget 為 Application 項目安裝組件:

Install-Package Panda.DynamicWebApi

為接口 IApplicationService繼承 IDynamicWebApi同時添加特性DynamicWebApi

[DynamicWebApi]
public interface IApplicationService:IDynamicWebApi
{
}

在 WebApi Host 項目中,Startup里配置動態(tài)WebApi:

Startup.cs:

// 添加動態(tài)WebApi 需放在 AddMvc 之后
services.AddDynamicWebApi();

然后打開瀏覽器訪問將會看到:

可以看到成功為我們的 StudentAppService 生成了WebApi,并且和Swagger完美兼容。

四.詳細介紹

經(jīng)過上面的介紹,大家應該可以看出使用是非常簡單的,只需兩步:

第一步:為你的類(或者該類的接口、該類繼承的抽象類,不得放在該類除前面兩種情況的父類上)繼承 IDynamicWebApi接口并加入特性[DynamicWebApi]

第二步:Startup中注冊

// 添加動態(tài)WebApi 需放在 AddMvc 之后
services.AddDynamicWebApi();

因為需要MVC的一些類來進行處理,所以必須放在AddMvc之后,本組件有檢查。

1.規(guī)則

本組件采用約定大于配置,所以在實際使用中有幾個規(guī)則:

(1)要讓類生成動態(tài)API需要滿足兩個條件,一個是該類直接或間接實現(xiàn) IDynamicWebApi,同時該類本身或者父抽象類或者實現(xiàn)的接口具有特性 DynamicWebApi

(2)添加特性 [NonDynamicWebApi] 可使一個類或者一個方法不生成API,[NonDynamicWebApi] 具有最高的優(yōu)先級。

(3)會對符合規(guī)則的動態(tài)API類名進行后綴的刪除,如:我們前面的 StudentAppService,會被刪除 AppService 后綴,這個規(guī)則是可以動態(tài)配置的。

(4)會自動添加API路由前綴,默認會為所有API添加 api前綴

(5)默認的HTTP動詞為POST,可以通過 HttpGet/HttpPost/HttpDelete 等等ASP.NET Core 內(nèi)置特性來覆蓋

(6)可以通過HttpGet/HttpPost/HttpDelete 等內(nèi)置特性來覆蓋默認路由

(7)默認會根據(jù)你的方法名字來設(shè)置HTTP動詞,如 CreateApple 或者 Create 生成的API動詞為 POST,對照表如下,若命中(忽略大小寫)對照表那么該API的名稱中的這個動詞將會被省略,如 CreateApple 將會變成 Apple,如未在以下對照表中,將會使用默認動詞 POST

方法名開頭 動詞
create POST
add POST
post POST
get GET
find GET
fetch GET
query GET
update PUT
put PUT
delete DELETE
remove DELETE

(8)強烈建議方法名稱使用帕斯卡命名(PascalCase)規(guī)范,以更好的自動處理API名稱,且使用以上對照表的動詞。如:

添加蘋果 -> Add/AddApple/Create/CreateApple

更新蘋果 -> Update/UpdateApple

...

(9)[DynamicWebApi] 特性因為可被繼承,所以為了父類被誤識別,禁止放在除抽象類、接口以外的父類上。

2.配置

所有的配置均在對象 DynamicWebApiOptions 中,說明如下:

屬性名 是否必須 說明
DefaultHttpVerb 默認值:POST。默認HTTP動詞
DefaultAreaName 默認值:空。Area 路由名稱
DefaultApiPrefix 默認值:api。API路由前綴
RemoveControllerPostfixes 默認值:AppService/ApplicationService。類名需要移除的后綴
RemoveActionPostfixes 默認值:Async。方法名需要移除的后綴
FormBodyBindingIgnoredTypes 默認值:IFormFile。不通過MVC綁定到參數(shù)列表的類型。

五.疑難解答

若遇到問題,可使用 Issues 進行提問。

六.結(jié)束

本項目開源地址:https://github.com/dotnetauth/Panda.DynamicWebApi 希望給個 Star 支持一下

本文Demo地址:XiaoChen.StudentManagement

ABP:https://github.com/aspnetboilerplate/aspnetboilerplate

到此這篇關(guān)于ASP.NET Core奇淫技巧之動態(tài)WebApi的實現(xiàn)的文章就介紹到這了,更多相關(guān)ASP.NET Core 動態(tài)WebApi內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

作者:曉晨Master

文章鏈接:https://www.cnblogs.com/stulzq/p/11007770.html

相關(guān)文章

最新評論