只有累積,沒有奇蹟

2019年6月20日 星期四

[WEBAPI] 如何設定 Swagger 為預設首頁 Start Page

問題
自己不管是在開發 .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 意見:

    張貼留言

    Copyright © m@rcus 學習筆記 | Powered by Blogger

    Design by Anders Noren | Blogger Theme by NewBloggerThemes.com