No operations in swagger when using conventional routing

Viewed 633

I am targeting .NET Core 2.1 and I don't want to use the Route attributes but use the default route (so called conventional routing). Here's my Startup code:

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

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "API V1", Version = "v1" });
        });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseSwagger();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "api/{controller}/{action}");
        });
    }
}

The controller is simple:

public class ValuesController : ControllerBase
{
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new[] { "value1", "value2" };
    }
}

I can go to https://myurl/api/values/get and it works (returns an array). However when I open swagger.json there are no operations defined:

{
  "openapi": "3.0.1",
  "info": {
    "title": "API V1",
    "version": "v1"
  },
  "paths": { },
  "components": { }
}

How can I make swagger to recognize conventional routing? I am using Swashbuckle 5.5.1 to generate swagger.

1 Answers
Related