我在WebApi中使用swagger的時候發現會出現不少問題,搜索不少地方都沒找到徹底解決問題的方法,後面本身解決了,但願對於遇到一樣問題朋友有幫助。我將先一步一步的演示項目中解決swagger遇到問題及解決方法。web
首先咱們新建一個api項目json
圖1 (默認生成項目)api
圖2(運行首頁)瀏覽器
圖3(默認Api列表)app
圖4(默認Get的Api)測試
以上圖1-4都是默認狀況下生成頁面看起來不是那麼好看,並且測試也不方便,下面將介紹怎麼使用swagger。ui
使用nuget包獲取Swashbule、swagger的包並安裝。this
圖5(Swashbule - swagger for Api)spa
圖6(swagger UI for net).net
通常安裝到就應該能夠正常運行了。可是運行後咱們發現拋出異常
圖7(異常1)
打開解決方案屬性-->生成,勾選XML文檔文件,保存就ok。
圖8
圖9(異常2)
出現該異常是因爲沒有增長依賴項,你們能夠自行查看本身的dll文件版本,作出修改,把下面的代碼插入到web.config中。
<dependentAssembly> <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly>
在把swagger.net中兩行代碼註釋,估計是由於nuget包中的代碼沒有更新致使這個異常出現
圖10(註釋不須要代碼)
好了如今咱們來看看能夠運行後的效果,在瀏覽器中輸入URL:http://localhost:28129/swagger會自動跳轉到http://localhost:28129/swagger/ui/index
圖11
至此咱們就可以正常運行swagger很是方便調試接口。
爲了方便測試咱們新建一個App的Model
/// <summary> /// App信息 /// </summary> public class App { /// <summary> /// App的ID號 /// </summary> public int Id { get; set; } /// <summary> /// App的名稱 /// </summary> public string Name { get; set; } /// <summary> /// App的說明 /// </summary> public string Remark { get; set; } }
返回消息ResultJson的Model
/// <summary> /// 返回處理結果 /// </summary> public class ResultJson { /// <summary> /// 返回代碼 /// </summary> public int Code { get; set; } /// <summary> /// 返回消息 /// </summary> public string Message { get; set; } }
新增長一個AppController的Api
public class AppController : ApiController { private List<App> GetApps() { List<App> list = new List<App>(); list.Add(new App() { Id = 1, Name = "WeChat", Remark = "WeChat" }); list.Add(new App() { Id = 2, Name = "FaceBook", Remark = "FaceBook" }); list.Add(new App() { Id = 3, Name = "Google", Remark = "Google" }); list.Add(new App() { Id = 4, Name = "QQ", Remark = "QQ" }); return list; } /// <summary> /// 獲取全部APP /// </summary> /// <returns>全部APP集合</returns> [HttpGet] public HttpResponseMessage Get() { return MyJson.ObjectToJson(GetApps()); } /// <summary> /// 獲取指定APP /// </summary> /// <param name="id">須要獲取APP的id</param> /// <returns>返回指定APP</returns> [HttpGet] public HttpResponseMessage Get(int id) { var app = GetApps().Where(m => m.Id.Equals(id)).FirstOrDefault(); return MyJson.ObjectToJson(app); } /// <summary> /// 增長App信息 /// </summary> /// <param name="value"></param> /// <returns></returns> [HttpPost] public HttpResponseMessage Insert([FromBody]App value) { ResultJson json = new ResultJson() { Code = 200, Message = "Ok" }; return MyJson.ObjectToJson(json); } /// <summary> /// 更新APP信息 /// </summary> /// <param name="value">APP信息</param> /// <returns>更新結果</returns> [HttpPut] public HttpResponseMessage UpdateApp([FromBody]App value) { ResultJson json = new ResultJson() { Code = 200, Message = "Ok" }; return MyJson.ObjectToJson(json); } /// <summary> /// 刪除APP信息 /// </summary> /// <param name="id">APP編號</param> /// <returns>刪除結果</returns> [HttpDelete] public HttpResponseMessage DeleteApp(int id) { ResultJson json = new ResultJson() { Code = 200, Message = "Ok" }; return MyJson.ObjectToJson(json); } }
爲了知足使用中須要用到Json格式數據,提出一個類
public class MyJson { public static HttpResponseMessage ObjectToJson(object obj) { JavaScriptSerializer js = new JavaScriptSerializer(); string r = js.Serialize(obj); var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(r, Encoding.UTF8, "text/json") }; return result; } public static HttpResponseMessage ObjectToJson(List<object> objs) { JavaScriptSerializer js = new JavaScriptSerializer(); string r = js.Serialize(objs); var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(r, Encoding.UTF8, "text/json") }; return result; } }
好了咱們運行後能夠看看效果
圖12
點擊 Try it out
圖13
咱們還能夠將註釋打開,咱們就能夠在頁面裏面看到註釋,方便調試接口時候調用人瞭解各參數信息。打開
public class SwaggerConfig { public static void Register() { var thisAssembly = typeof(SwaggerConfig).Assembly; GlobalConfiguration.Configuration .EnableSwagger(c => { c.SingleApiVersion("v1", "SwaggerApiDemo"); c.IncludeXmlComments(GetXmlCommentsPath()); }) .EnableSwaggerUi(c => { }); } private static string GetXmlCommentsPath() { return string.Format("{0}/bin/SwaggerApiDemo.XML", System.AppDomain.CurrentDomain.BaseDirectory); } }
上面標記顏色爲新增長內容,好了咱們來看看最終效果
圖14
圖15
咱們能夠看到註釋部分了,這樣咱們的swagger就完成了。
我把最終的代碼發到此處,有須要代碼的時候朋友能夠直接下載。
http://pan.baidu.com/s/1mhFVZ4W