Swagger не генерирует swagger.json - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть основной проект MVC asp.net и отдельный проект WebApi в одном решении. Я добавляю чванство, следуя документации на github. Вот мой Startup.cs проекта MVC:

public void ConfigureServices(IServiceCollection services)
    {
        //...
        // Adding controllers from WebApi:
        var controllerAssembly = Assembly.Load(new AssemblyName("WebApi"));
        services.AddMvc(o =>
            {
                o.Filters.Add<GlobalExceptionFilter>();
                o.Filters.Add<GlobalLoggingFilter>();
            })
            .AddApplicationPart(controllerAssembly)
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            });

        services.AddSwaggerGen(c =>
        {
            //The generated Swagger JSON file will have these properties.
            c.SwaggerDoc("v1", new Info
            {
                Title = "Swagger XML Api Demo",
                Version = "v1",
            });
        });

        //...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //...
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Swagger XML Api Demo v1");
        });

        //...

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

Вот нюгеты:

nugets

Маршрутизация атрибутов контроллеров WebApi:

[Route("api/[controller]")]
public class CategoriesController : Controller
{
    // ...
    [HttpGet]
    public async Task<IActionResult> Get()
    {
        return Ok(await _repo.GetCategoriesEagerAsync());
    }
    // ...
}

Когда я пытаюсь перейти к / swagger, он не находит /swagger/v1/swagger.json: Json not found

Что я делаю не так?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 06 августа 2019

Просто хотел добавить сюда и мой опыт. Я дал версию в configureServices как V1 (обратите внимание на V в заглавных буквах) и

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", //this v was in caps earlier
            new Swashbuckle.AspNetCore.Swagger.Info
            {
                Version = "v1",//this v was in caps earlier
                Title = "Tiny Blog API",
                Description = "A simple and easy blog which anyone love to blog."
            });
        });
        //Other statements
    }

А потом в методе configure это было в маленьком случае

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

        app.UseMvc();
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Tiny Blog V1");
        });
    }

Может быть, это может кому-то помочь.

0 голосов
/ 27 ноября 2018

Я застрял на этой проблеме часами ... и нашел причину ...

Проверьте код ниже !!

.. Startup.cs ..

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

    app.UseHttpsRedirection();
    app.UseMvc();
    app.UseSwagger(); // if I remove this line, do not work !
    app.UseSwaggerUi3();
}
...