Невозможно создать файл swagger.json при использовании aspnet-api-versioning - PullRequest
0 голосов
/ 29 октября 2019

У меня есть приложение .NET Core 2.2. Я пытаюсь настроить API с разными версиями, используя Microsoft.AspnetCore.Mvc.Versioning nugetpackage. Я следовал за образцами , предоставленными в хранилище.

Я хочу использовать версию API, основанную на имени пространства имен определяющего контроллера.

Структура проекта
enter image description here

Контроллеры

namespace NetCoreApiVersioning.V1.Controllers
{
    [ApiController]
    [Route("[controller]")]    
    [Route("v{version:apiVersion}/[controller]")]
    public class HelloWorldController : ControllerBase
    {
        public IActionResult Get()
        {
            return Ok();
        }
    }
}

namespace NetCoreApiVersioning.V2.Controllers
{
    [ApiController]    
    [Route("[controller]")]    
    [Route("v{version:apiVersion}/[controller]")]    
    public class HelloWorldController : ControllerBase
    {
        public IActionResult Get()
        {
            return Ok();
        }
    }
}

Обратите внимание, что контроллеры не имеют атрибута [ApiVersion], потому что я хочу, чтобы управление версиями определялось пространством имен

Startup.cs

    public class Startup
    {

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddApiVersioning(
                options =>
                {
                    // reporting api versions will return the headers "api-supported-versions" and "api-deprecated-versions"
                    options.ReportApiVersions = true;

                    // automatically applies an api version based on the name of the defining controller's namespace
                    options.Conventions.Add(new VersionByNamespaceConvention());
                });

            services.AddVersionedApiExplorer(
               options =>
               {
                   // add the versioned api explorer, which also adds IApiVersionDescriptionProvider service
                   // note: the specified format code will format the version as "'v'major[.minor][-status]"
                   options.GroupNameFormat = "'v'VVV";

                   // note: this option is only necessary when versioning by url segment. the SubstitutionFormat
                   // can also be used to control the format of the API version in route templates
                   options.SubstituteApiVersionInUrl = true;
               });

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

            // commented code below is from  
            // https://github.com/microsoft/aspnet-api-versioning/tree/master/samples/aspnetcore/SwaggerSample      

            //services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();
            //services.AddSwaggerGen(
            //    options =>
            //    {
            //        // add a custom operation filter which sets default values
            //        //options.OperationFilter<SwaggerDefaultValues>();


            //        // integrate xml comments
            //        //options.IncludeXmlComments(XmlCommentsFilePath);
            //    });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApiVersionDescriptionProvider provider)
        {
            // remaining configuration omitted for brevity

            // Enable middleware to serve generated Swagger as a JSON endpoint.
            app.UseSwagger();

            app.UseSwaggerUI(
                options =>
                {
                    // build a swagger endpoint for each discovered API version
                    foreach (var description in provider.ApiVersionDescriptions)
                    {
                        options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
                    }
                });

            app.UseMvc();
        }        
    }

Проблема
Невозможно сгенерировать файл swagger.json. Когда я просматриваю URL /swaggger, я вижу ошибку undefined /swagger/v1/swagger.json

1 Ответ

1 голос
/ 29 октября 2019

найдено .. мне не хватает атрибута [HttpGet] в ActionMethods

...