【问题标题】:Integrating swagger into ASP.NET core api project [closed]将 swagger 集成到 ASP.NET 核心 api 项目中[关闭]
【发布时间】:2021-04-03 02:43:58
【问题描述】:

我有一个 ASP.NET core api 项目,我从 .NET core 3.1 开始,然后升级到 5.0。它以前没有集成 swagger,我现在想包含它。

我带来了Swashbuckle.AspNetCore 包v5.6.3。通读这个page,我修改了我的Startup.cs 以包括services.AddSwaggerGen(); 以及app.UseSwagger();app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "DemoAPI"));(标准样板文件)。

Startup.cs 的相关部分(目前的情况):

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title = "DemoAPI",
                    Version = "v1"
                });
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                c.IncludeXmlComments(xmlPath);
            });
            if (Environment.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "DemoAPI"));
            }

在启动时我看到:

有人可以帮我看看我需要在这里做什么进一步的设置吗?

【问题讨论】:

    标签: c# asp.net-core swagger asp.net-core-webapi swashbuckle.aspnetcore


    【解决方案1】:

    这是一个例子。您需要确保打开 xml 注释文件生成,并设置 entryAssembly 和 apiVersion 变量,即“v1”或任何您喜欢的。

    运行后,只需访问 /swagger 即可查看全部内容。

    // Register the Swagger generator, defining 1 or more Swagger documents
    services.AddSwaggerGen(c =>
    {
        try
        {
            c.SwaggerDoc(apiVersion, new Microsoft.OpenApi.Models.OpenApiInfo { Title = entryAssembly.GetName().Name, Version = apiVersion });
            foreach (string xmlCommentsFile in Directory.GetFiles(AppContext.BaseDirectory, "*.xml"))
            {
                try
                {
                    c.IncludeXmlComments(xmlCommentsFile, true);
                }
                catch
                {
                    // nothing to be done, fails in unit tests
                }
            }
        }
        catch
        {
            // nothing to be done, fails in unit tests
        }
    });
    
    // later on in app setup
    // enable middleware to serve generated Swagger as a JSON endpoint.
    app.UseSwagger();
    
    // enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
    // specifying the Swagger JSON endpoint.
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint($"/swagger/{apiVersion}/swagger.json", $"{entryAssembly.GetName().Name} {apiVersion}");
    });
    

    【讨论】:

    • 嗯,不知道那个 try/catch - 我很感激,并将整合它。我已经更新了我的问题,以表明就我所见,我认为我已经在做你所展示的事情了?但仍然出现错误。
    • 我唯一能想到的是您的 xml 文档代码略有不同,可能这些文件没有按您的预期输出
    • 我很欣赏@jjxtra,但我想也许我们有点离题了?似乎缺少的不是 xml 文件,而是一个名为 swagger.json 的文件?奇怪的是,我创建了一个新的 .NET 5.0 webapi 项目,默认情况下,一切正常 - 但在我能找到的生成文件中的任何地方似乎都没有任何 swagger.json。
    【解决方案2】:

    好的,我发现了发生了什么。在我的情况下,我在现有项目中有几个带有路由的端点,它们没有[HttpGet] 属性。这导致大摇大摆地出错。一旦我解决了这个问题,现在一切都开始运行了。

    【讨论】:

      猜你喜欢
      • 2023-02-03
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      相关资源
      最近更新 更多