自己不管是在開發 .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
透過反射來看一下 RedirectHandler 類別內容,主要是繼承 HttpMessageHandler,並透過 rootUrlResolver 與 redirectPath 做到轉頁的功能。
- config.Routes.MapHttpRoute(
- name: "swagger_root",
- routeTemplate: "",
- defaults: null,
- constraints: null,
- handler: new RedirectHandler((message => message.RequestUri.ToString()), "swagger"));
加入代碼進行編譯後,在重新啟動結果與上述相同首頁都為 swagger 頁面,這裡就不在重複貼首頁
- 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;
- }
- }
- }
自己過去都是使用第一個方式來設定首頁,今天在與強者同事討論中分享了不同的方法給我,讓我學到了不少,如果有需要的各位也可以自行挑選哪種最適合你,以上如果有問題歡迎提出討論,Happy Coding !
How to set Swagger as default start page?
0 意見:
張貼留言