ASP.NET Core 2.0 でも Swashbuckle.AspNetCore は使えた

Swashbuckle.AspNetCore は ASP.NET Core 2.0 に対応していないから使えないと思っていたが、 勘違いだった。

github.com

Swashbuckle.AspNetCore のイシューを読んで発覚。

github.com

実際に試してみたところ、ASP.NET Core 2.0 プロジェクトに Swashbuckle.AspNetCore は追加できたし、ASP.NET Core 1.1.x のパッケージが芋づる式に追加されることもなかった。

今回作成した超単純なサンプルは次の通り。

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Swashbuckle.AspNetCore.Swagger;
using System.Collections.Generic;

namespace SampleApi
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            // Swagger を使えるようにする
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new Info
                {
                    Title = "Sample API",
                    Version = "v1"
                });
            });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();

            // Swagger UI を使う
            app.UseSwagger();
            app.UseSwaggerUI(options =>
            {
                options.SwaggerEndpoint("/swagger/v1/swagger.json", "Sample API V1");
            });
        }
    }

    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        [HttpGet("{id}")]
        public string Get(int id)
        {
            return "value";
        }

        [HttpPost]
        public void Post([FromBody]string value)
        {
        }

        [HttpPut("{id}")]
        public void Put(int id, [FromBody]string value)
        {
        }

        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}

Swagger UI はちゃんと表示できた。

f:id:griefworker:20170823170224p:plain

この前試したときは、ASP.NET Core 1.1.2 関連のパッケージが追加されそうで慌ててキャンセルしたんだけど、見間違いだったんだろうか…。 まぁ、Swashbuckle.AspNetCore が使えることが分かったんで、ASP.NET Core 2.0 にアップグレードするにあたっての障壁は無くなったな。