首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swagger未生成swagger.json

Swagger未生成swagger.json
EN

Stack Overflow用户
提问于 2018-09-04 16:46:48
回答 3查看 11.5K关注 0票数 4

我在一个解决方案中包含了asp.net核心MVC项目和独立的WebApi项目。我在github上的文档之后添加了swagger。这是我的mvc项目的Startup.cs:

代码语言:javascript
运行
复制
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?}");
        });
    }

下面是一些小细节:

WebApi控制器属性路由:

代码语言:javascript
运行
复制
[Route("api/[controller]")]
public class CategoriesController : Controller
{
    // ...
    [HttpGet]
    public async Task<IActionResult> Get()
    {
        return Ok(await _repo.GetCategoriesEagerAsync());
    }
    // ...
}

当我尝试访问/swagger时,它找不到/swagger/v1/swagger.json:

我哪里做错了?

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2018-11-27 18:44:25

我被这个问题困扰了好几个小时。我找到了原因..。

检查下面的代码!!

..Startup.cs..

代码语言:javascript
运行
复制
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();
}
票数 3
EN

Stack Overflow用户

发布于 2019-08-06 13:52:42

我也想在这里补充一下我的经验。我在configureServices中给出的版本是V1 (注意大写的V )和

代码语言:javascript
运行
复制
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方法中,它是小写的

代码语言:javascript
运行
复制
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");
        });
    }

也许它能帮助某些人。

票数 2
EN

Stack Overflow用户

发布于 2022-01-17 01:30:59

检查您是否正确设置了环境,以及命令app.UseSwagger是否不在if中,以便仅在确定的环境(如开发)上执行。

测试解决方案是在任何条件语句之外添加行app.UseSwagger()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52162321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档