.net core項目實戰之基於Restful API+Swagger項目搭建

在上一篇[.net core項目實戰之開發環境搭建]主要介紹了項目開發環境的搭建,本篇主要簡單介紹下 .net core下搭建WebApi及集成Swagger,同時介紹一些自己編程時的一些習慣。

項目結構

項目結構其實不用多說,基本上大同小異。

- Controller:對外暴露的契約

- Business/IBussiness:業務邏輯層實現及介面

- DataAccess:數據訪問層

- Model:實體類庫

- Common:公共方法類庫

Swagger集成

首先通過NuGet載入依賴包Swashbuckle.AspNetCore

然後右擊你的項目,在屬性中,勾選下生成XML文檔文件,Swagger會自動解析對應的XML進行匹配。

然後開始編碼部分,在Startup.csConfigureServicesf方法下加入下面的代碼:

services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" }); var basePath = PlatformServices.Default.Application.ApplicationBasePath; var xmlPath = Path.Combine(basePath, "MyDemo.xml"); var xmlPath1 = Path.Combine(basePath, "MyDemo.Model.xml"); c.IncludeXmlComments(xmlPath); c.IncludeXmlComments(xmlPath1);});

這裡我將Model層的Xml也載入了,這樣在api文檔上也能顯示對應欄位的描述。

Configure 方法中加入下面代碼:

app.UseSwagger(); app.UseSwaggerUI(c=>{ c.SwaggerEndpoint("/swagger/v1/swagger.json", "我的API V1"); });

配置到這裡,可以直接運行看下效果了,結果運行後發現報錯如下:

那是因為主項目沒有引用Model這個類庫,導致在主項目的debug中沒有生產對應的xml,引用下,重新生產再次運行,輸入/swagger就能看到對應的效果了。

記得項目接入的時候才1.0.0的版本,如今2.3.0的版本樣式也變了很多了。

這樣我可以啟動默認頁設為/swagger,右擊docker-compose修改對應的url:

代碼編寫

邏輯代碼不多說,基本沒什麼區別,大多數常用的屬性和方法.net core基本都支持,放心大膽的寫吧。

這裡推薦使用非同步編程await,async,但要注意的是,一定要非同步到底,避免阻塞。

可以簡單看個例子:

//Dal層:public static async Task<ResponseResult> Delete(long id){ var result = new ResponseResult(); try { using (var conn = DatabaseManager.GetConnection(DatabaseManager.DBName)) { await conn.OpenAsync(); string sql = $@"DELETE FROM USER WHERE Id=@Id"; await conn.ExecuteAsync(sql, new { Id = id, UpdateTime = DateTime.Now }); } } catch (Exception ex) { //記錄日誌 return new ResponseResult { Result = false, Code = ResponseCode.UnknownException, ErrorMessage = ex.Message }; } return result;}//BLL層public static async Task<ResponseResult> Delete(long id){ if (id <= 0) return new ResponseResult { Result = false, ErrorMessage = "未傳入主鍵或主鍵非法", Code = ResponseCode.NeedsKeyParameter }; return await UserDataAccess.Delete(id);}//Controller[HttpDelete("{id}")]public async Task<IActionResult> Delete(long id){ return AssertNotFound(await UserService.Delete(id));}

由於是演示,這裡用的靜態類和靜態方法,也省去了Interface,實際項目中可以根據需要選擇最合適的。

總結

.net core開發web api還是比較方便的,大家可以試試。


推薦閱讀:

.net core項目實戰匯總
工廠模式、工廠方法模式和抽象工廠模式的差異分析
淺談兩個相互引用的對象是否會被GC回收
python2.X 與python3.X 完美共存與windows 環境
數據結構之線性表

TAG:自學編程 | NETCore | C |