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

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

項目結構

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

  • Controller:對外暴露的契約
  • Business/IBussiness:業務邏輯層實現及接口
  • DataAccess:數據訪問層
  • Model:實體類庫
  • Common:公共方法類庫

圖1

Swagger集成

首先經過NuGet加載依賴包Swashbuckle.AspNetCoresql

圖2

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

圖3

而後開始編碼部分,在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文檔上也能顯示對應字段的描述。json

Configure 方法中加入下面代碼:api

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

配置到這裏,能夠直接運行看下效果了,結果運行後發現報錯以下:app

圖4

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

記得項目接入的時候才1.0.0的版本,現在2.3.0的版本樣式也變了不少了。async

圖5

這樣我能夠啓動默認頁設爲/swagger,右擊docker-compose修改對應的url:異步編程

圖6

代碼編寫

邏輯代碼很少說,基本沒什麼區別,大多數經常使用的屬性和方法.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仍是比較方便的,你們能夠試試。

相關文章
相關標籤/搜索