ASP.NET Web Api 2 介面API文檔美化之Swagger

來源:互聯網
上載者:User

標籤:c#   swagger   asp.net web api 2   owin   

使用第三方提供的swgger ui 可有效提高 web api 介面列表的閱讀性,並且可以在頁面中測試服務介面。

但本人在查閱大量資料並進行編碼測試後,發現大部分的swagger執行個體並不能有效運行。例如如下兩個網址:http://www.cnblogs.com/caodaiming/p/4156476.html 和 http://bitoftech.net/2014/08/25/asp-net-web-api-documentation-using-swagger/。經過本人的一番折騰,最終發現,原來是由版本的差異導致的(以上兩個例子在4.2.0版本下運行成功,讀者可自行測試)。哎,要是這些作者能夠標出外掛程式包的版本,真能省下很多功夫。

目前Swashbuckle的最新穩定版本為5.2.1版。這個版本的編碼方式與4.2.0版本有一定差異,本文也以5.2.1版本為例進行說明。

註:本文使用OWIN來自寄宿(self-host) web api,不清楚的讀者可參考:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api。

1、建立一個控制台應用程式OwinConsoleApp。Nuget分別添加Swashbuckle(5.2.1版本)和Microsoft.AspNet.WebApi.OwinSelfHost。添加Swashbuckle時,會在項目中自動添加App_Start檔案夾和一個檔案名稱為“SwaggerConfig”的檔案。

2、建立一個StudentController檔案, 代碼如下:

using System;using System.Collections.Generic;using System.Web.Http;using System.Web.Http.Description;namespace OwinConsoleApp{    /// <summary>    /// 學生資訊    /// </summary>    public class StudentController : ApiController    {        /// <summary>        /// 得到所有的學生資訊        /// </summary>        /// <returns></returns>        public IEnumerable<string> Get()        {            return new List<string>() { "student A", "student B" };        }        /// <summary>        /// 根據學生編號得到學生資訊        /// </summary>        /// <param name="Id">學生編號</param>        /// <returns></returns>        public string Get(int Id)        {            return "學號:" + Id;        }        /// <summary>        /// 新增學生        /// </summary>        /// <param name="studentModel">學生實體</param>        /// <remarks>添加一個新的學生</remarks>        /// <response code="400">Bad request </response>        /// <response code="500">Internal Server Error</response>        public void Post(String studentModel)        {        }        /// <summary>        /// 修改學生資訊        /// </summary>        /// <param name="Id">學生編號</param>        /// <param name="studentModel">學生實體</param>        [ResponseType(typeof(string))]        [ActionName("UpdateStudentById")]        public void Put(int Id, string studentModel)        {        }        /// <summary>        /// 刪除學生資訊        /// </summary>        /// <param name="Id">學生編號</param>        public void Delete(int Id)        {        }    }}

3、修改SwaggerConfig檔案如下:

using System.Linq;using System.Web.Http;using WebActivatorEx;using OwinConsoleApp;using Swashbuckle.Application;[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]namespace OwinConsoleApp{    public class SwaggerConfig    {        public static void Register(HttpConfiguration config)        {            config.EnableSwagger(c =>                    {                        c.SingleApiVersion("v1", "");                        c.IncludeXmlComments(GetXmlCommentsPath());                        c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());                    })                .EnableSwaggerUi();        }        private static string GetXmlCommentsPath()        {            return System.String.Format(@"{0}\Swagger.XML", System.AppDomain.CurrentDomain.BaseDirectory);        }    }}
4、建立一個Startup檔案,代碼如下:

using Owin;using Microsoft.Owin;using System.Web.Http;using Swashbuckle.Application;[assembly: OwinStartup(typeof(OwinConsoleApp.Startup))]namespace OwinConsoleApp{    public class Startup    {        public void Configuration(IAppBuilder appBuilder)        {            // Configure Web API for self-host.             HttpConfiguration config = new HttpConfiguration();            config.Routes.MapHttpRoute(                name: "DefaultApi",                routeTemplate: "api/{controller}/{id}",                defaults: new { id = RouteParameter.Optional }            );            SwaggerConfig.Register(config);            appBuilder.UseWebApi(config);        }    }}
5、修改program程式,代碼如下:

using System;using Microsoft.Owin.Hosting;namespace OwinConsoleApp{    class Program    {        static void Main(string[] args)        {            string baseAddress = "http://localhost:9000/";            // Start OWIN host             using (WebApp.Start<Startup>(url: baseAddress))            {                Console.WriteLine("OWIN SERVICE OPEN!");                Console.Read();            }            Console.ReadLine();        }    }}

6、右鍵項目屬性,在屬性的“產生”中設定輸出文檔:



註:這裡的XML檔案路徑和檔案名稱應與SwaggerConfig檔案中的配置保持一致。

7、管理員身份運行程式。在瀏覽器中輸入如下地址:http://localhost:9000/swagger,顯示如下頁面:



點擊相應的服務,在顯示的框中輸入對應的資訊,再點擊“Try it out!”,即可成功調用服務,並可查看返回的結果。

後話:搞了兩天,終於把swagger搞出來了,當初就是在版本的差異上浪費了太多時間。寫此文章,與和我有相同經曆的人共勉。文中若有紕漏,還請指出。





著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

ASP.NET Web Api 2 介面API文檔美化之Swagger

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.