網上看了一些Abp vNext引用swagger的教程,大緻流程都差不多,就是生成每一層對應的xml然後使用IncludeXmlComments方法來引用,後面親自實踐發現有些差異和要點,在此記錄一下。
基本步驟:
- 右擊項目解決方案,屬性-生成-輸出-勾選XML文檔檔案,删除路徑資訊僅保留xml檔案名稱。例如:xxx.Application.xml。
- hostmodule下,AddSwaggerGen内添加以下代碼:
1 context.Services.AddSwaggerGen(options=> { 3 // 添加swagger-API方法注釋 4 var xmlapppath = Path.Combine(AppContext.BaseDirectory, "xxx.Application.xml"); 5 if (File.Exists(xmlapppath)) 6 options.IncludeXmlComments(xmlapppath, true); 7 8 // 添加swagger-DTO參數注釋 9 var xmlContractspath = Path.Combine(AppContext.BaseDirectory,"xxx.Application.Contracts.xml"); 10 if (File.Exists(xmlContractspath)) 11 options.IncludeXmlComments(xmlContractspath, true); 12 13 // 添加swagger-自定義控制器注釋 14 var xmlapipath = Path.Combine(AppContext.BaseDirectory, "xxx.WebAPI.xml"); 15 if (File.Exists(xmlapipath)) 16 options.IncludeXmlComments(xmlapipath , true); 17 });
- 引用路徑不要采用本地路徑,可以使用AppContext.BaseDirectory來拼接位址以避免釋出時遇到問題。
- xxx.Application.xml添加引用後可以生成API方法注釋,但是并沒有DTO參數注釋,因為dto定義都在應用服務抽象層,需要添加xxx.Application.Contracts.xml後才會有參數注釋。
- 因為一般使用的是動态API,如果你有自定義的controller方法,需要添加xxx.HttpApi.xml進來才能看到自定義控制器方法的注釋。
- 配置生成XML檔案時,注意配置release環境下的輸出,不要隻配Debug模式。