自己不管是在開發 .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 意見:
張貼留言