Swagger 是一個方便後端工程師提供 API 測試的 UI 工具,在早期其實就有寫過相關文章,但在 .NET 6 後寫法有些改變,故重寫一篇來當作筆記。

首先在 NuGet 上搜尋”Swashbuckle.AspNetCore”並安裝,之後在 Program 上加入下列程式碼

...

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

...

app.UseAuthorization();

app.UseSwagger();
app.UseSwaggerUI();

...

這樣在 View 上可簡化成:<email mail-to="aaa3">aaa3</email>

而以下範例則是單純生出一個連到 Google 的 html a tag:

[HtmlTargetElement("test")]
public class TestTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "a";
        output.Attributes.SetAttribute("href", "https://www.google.com.tw");
        output.Content.SetContent("Test Content");
    }
} 

之後加入 Model:

public class DataResult
{
    public string status { get; set; }
    public object data { get; set; }
}

之後加入 APIController:

[Route("API")]
public class APIController : Controller
{
    /// <summary>
    /// Get datas
    /// </summary>
    /// <returns>return json object</returns>
    [HttpGet("GetDatas")]
    public IActionResult GetDatas()
    {
        var data = new
        {
            aaa3 = "aaa3",
            aaa4 = 9
        };
        DataResult dataResult = new DataResult
        {
            status = "0",
            data = data
        };

        return new JsonResult(dataResult);
    }

    /// <summary>
    /// Get datas by date
    /// </summary>
    /// <param name="date"></param>
    /// <returns>return json object</returns>
    [HttpGet]
    [Route("GetDatasByDate/{date}")]
    public IActionResult GetDatasByDate(string date)
    {
        var data = new
        {
            aaa3 = "aaa3",
            aaa4 = 9
        };
        DataResult dataResult = new DataResult
        {
            status = "0",
            data = data
        };

        return new JsonResult(dataResult);
    }
}

要注意的是,在每個 action 上都要明確加上 route 路徑,另外如果在 url 上要加上變數,如上面程式碼所示,可這樣寫:[Route("GetDatasByDate/{date}")]

最後測試網址如下:

https://[FQDN]/swagger/

就可以看到測試網頁了

參考資料