前言
在上一篇文章IT輪子系列(三)——如何給返回類型添加注釋——Swagger的使用(二) 介紹如何使用swashbuckle的時候忽略了一個問題,就是默認創建的API項目在生成文檔的時候是沒有顯示方法名,只顯示了控制器的名字。如下圖:
User 控制器代碼如下:

1 public class UserController : BaseController 2 { 3 /// <summary> 4 /// 獲取用戶信息 5 /// </summary> 6 /// <param name="model">獲取用戶信息模型</param> 7 /// <returns></returns> 8 [HttpPost] 9 //添加方法修飾屬性返回類型說明 10 [SwaggerResponse(HttpStatusCode.OK, Type = typeof(ResultInfo<UserInfo>))] 11 public HttpResponseMessage GetUserInfo([FromBody]GetUserInfoModel model) 12 { 13 ResultInfo<UserInfo> result = new ResultInfo<UserInfo>(); 14 try 15 { 16 UserInfo user = new UserInfo(); 17 user.Name = "Peter"; 18 user.Phone = model.phone; 19 user.Email = "itwheels@163.com"; 20 result.Data = user; 21 } 22 catch (Exception ex) 23 { 24 result.Status = "FAIL"; 25 result.Msg = ex.Message; 26 } 27 28 return toJson(result); 29 } 30 }
按照代碼,我們想要的顯示方法名GetUserInfo。今天在寫另一篇API相關文章,才發現這個問題。經過一份琢磨,發現swashbuckle 是根據我們在路由配置WebApiConfig中的模版來生成的。如,默認的配置代碼為:
1 config.Routes.MapHttpRoute( 2 name: "DefaultApi", 3 routeTemplate: "api/{controller}/{id}", 4 defaults: new { id = RouteParameter.Optional } 5 );
所以,按照這個配置生成的文檔只顯示了控制器的名字,卻沒有方法名。
解決方案
按照上面分析的思路,要在swagger文檔中顯示接口的方法名,只需修改路由模版就可以了。修改后的代碼如下:
1 config.Routes.MapHttpRoute( 2 name: "DefaultApi", 3 routeTemplate: "api/{controller}/{action}" 4 );
這樣修改后,我們就可以在swagger文檔中看到方法名拉。如下圖: