.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.cs
中ConfigureServices
f方法下加入下面的代碼:
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 環境
※數據結構之線性表