自己不管是在開發 .NET Framework 或是 .NET Core 專案,只要遇到是 Web API 專案都會安裝 Swagger 來協助測試 API 的動作,只要使用過 Swagger 的開發者都知道啟動專案後第一件事就是要在開啟的頁面網址加上 Swagger,接著在繼續透過 Swagger 頁面進行 API 測試的動作,但每次開啟時就需要在網址上輸入一次也是頗麻煩的,今天就來分享兩種方式可以起始頁面為 swagger 頁面,若有問題歡迎提出一起討論或是給予指導。
在專案設定中可以調整專案起始的頁面,設定方式如下
專案點擊右鍵 > 選擇 Web > Start Action 部分選擇 Specific Page > 輸入 swagger
設定完畢後按下存檔,在重新開啟
解決方案- webAPIConfig
自如果希望在 Code 裡面做調整的話,則可以在 App_Start 底下的 WebAPIConfig.cs 加入下段程式碼,主要是透過 Swashbuckle.Core 中的 RedirectHandler 類別定義 redirectPath
config.Routes.MapHttpRoute( name: "swagger_root", routeTemplate: "", defaults: null, constraints: null, handler: new RedirectHandler((message => message.RequestUri.ToString()), "swagger"));透過反射來看一下 RedirectHandler 類別內容,主要是繼承 HttpMessageHandler,並透過 rootUrlResolver 與 redirectPath 做到轉頁的功能。
namespace Swashbuckle.Application { public class RedirectHandler : HttpMessageHandler { private readonly Func<HttpRequestMessage, string> _rootUrlResolver; private readonly string _redirectPath; public RedirectHandler(Func<HttpRequestMessage, string> rootUrlResolver, string redirectPath) { this._rootUrlResolver = rootUrlResolver; this._redirectPath = redirectPath; } protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { string uriString = this._rootUrlResolver(request) + "/" + this._redirectPath; HttpResponseMessage response = HttpRequestMessageExtensions.CreateResponse(request, HttpStatusCode.MovedPermanently); response.Headers.Location = new Uri(uriString); TaskCompletionSource<HttpResponseMessage> completionSource = new TaskCompletionSource<HttpResponseMessage>(); completionSource.SetResult(response); return completionSource.Task; } } }加入代碼進行編譯後,在重新啟動結果與上述相同首頁都為 swagger 頁面,這裡就不在重複貼首頁
自己過去都是使用第一個方式來設定首頁,今天在與強者同事討論中分享了不同的方法給我,讓我學到了不少,如果有需要的各位也可以自行挑選哪種最適合你,以上如果有問題歡迎提出討論,Happy Coding !
How to set Swagger as default start page?
0 意見:
張貼留言