ひでぼ~blog

C#ときどきゲーム

ASP.NET CoreでSwaggerUIを使ってみる

ASP.NET CoreでWebAPIのデバッグをしていてSwaggerUIがすごい便利だったので適当なプロジェクトを作ってSwaggerUIを表示するところまでをやってみます。

nugetパッケージの準備

ASP.NET Core 3.1で適当なWebAPIのプロジェクトを作成します。nugetパッケージの管理からSwashbuckle.AspNetCoreをインストールします。 f:id:hideb3:20200409223216p:plain

ミドルウェアの追加

Startup.csを少し変更します。 ConfigureServicesメソッドにservoce.AddSwaggerGen()を追加します。

public void ConfigureServices(IServiceCollection services) {
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Sample APIs", Version = "v1" });
    });
}

Configureメソッドにapp.UseSwagger()とapp.UseSwaggerUI()を追加します。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
    if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
    }
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "Sample APIs");
    });

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints => {
        endpoints.MapControllers();
    });
}

launchUrlを変更する

デバッグ実行時に最初に呼ばれるAPIがデフォルトではwetherforecastというお天気情報APIになっているのでswaggerUIが表示されるように変更します。 swaggerUIの画面はhttp://localhost:{port}/swaggerで見ることができるので、プロジェクトのプロパティからデバッグ>ブラウザーの起動をwetherforecastからswaggerに変更します。 f:id:hideb3:20200409225247p:plain

実行してみる

ここまでできたら実行してみます。こんな感じの画面が表示されるはずです。 f:id:hideb3:20200409225523p:plain

f:id:hideb3:20200409230427p:plain デフォルトで用意されているWetherforecastControllerのアクションが1つ表示されています。アクションをクリックするとアコーディオンが展開されてTry it outからAPIを叩くことができ、 レスポンスも表示されます。

アクションを追加してみる

HttpGetのアクションだけだと味気ないので、HttpPostのアクションをWetherforecastControllerに追加してみます。

/// <summary>
/// 更新します。
/// </summary>
/// <param name="request">更新リクエスト</param>
/// <returns></returns>
[HttpPost]
public IActionResult Update([FromBody]UpdateRequest request) {
    return Ok();
}

UpdateRequestの定義はこんな感じです。

/// <summary>
/// 更新リクエスト
/// </summary>
public class UpdateRequest {
    /// <summary>
    /// ID
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    /// 名前
    /// </summary>
    public string Name { get; set; }
}

再度SwaggerUIを表示してみる

追加したHttpPost版のWetherforecastが表示されています。中を開くとjson形式のパラメータがポストできるようになっています。 f:id:hideb3:20200409231724p:plain

ローカルでWebAPIを叩くとき、PostmanやVSCode拡張のRestClientなどを使ってましたがSwaggerUIだけで完結しそうですね。

参考

docs.microsoft.com