【问题标题】:Swagger .Net CoreSwagger .Net 核心
【发布时间】:2018-05-10 02:04:14
【问题描述】:

我正在尝试为我的 .Netcore 应用程序 (1.1) 配置 swagger,但无法生成文档。

这是我的配置

public void ConfigureServices(IServiceCollection services) {

    services.AddMvcCore().AddVersionedApiExplorer(o => o.GroupNameFormat = "1.0");
    services.AddMvc();
    services.AddApiVersioning(opt =>
            {

                opt.ApiVersionReader = new HeaderApiVersionReader("api-version");
                opt.DefaultApiVersion = new ApiVersion(1, 0);
                opt.ReportApiVersions = true;
                opt.AssumeDefaultVersionWhenUnspecified = true;
            });
    services.AddSwaggerGen(
                options =>
                {
                    options.SwaggerDoc("1.0",new Info {Contact = new Contact() {Name="Admin" } });
                    // add a custom operation filter which sets default values
                    options.OperationFilter<SwaggerDefaultValues>();
                });
}

在配置方法中

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

            app.UseSwagger(o=>
            {
                o.RouteTemplate = "docs/{documentName}/swagger.json";

            });
            app.UseSwaggerUI(
                options =>
                {
                    options.SwaggerEndpoint("/docs/1.0/swagger.json", "1.0");
                });

当我运行应用程序时, http://localhost:5000/docs/1.0/swagger.json

我得到以下方法,没有发现我的 API。

{"swagger":"2.0","info":{"contact":{"name":"Admin"}},"basePath":"/","paths":{},"definitions":{},"securityDefinitions":{}}

【问题讨论】:

  • 1.您是否使用相同的SwaggerDefaultValues 过滤器?如果没有,请分享。
  • @Set,我按照这个示例来设置 swagger github.com/Microsoft/aspnet-api-versioning/blob/master/samples/… 我已经设置了 SwaggerDefaultValues 过滤器。
  • 我确实评论了 addMvc 并将我的代码配置为使用 addMVCCore ,但我仍然有同样的问题services.AddMvcCore(). AddControllersAsServices(). AddJsonFormatters(). AddJsonOptions(opt=&gt; { if (opt.SerializerSettings.ContractResolver != null) { opt.SerializerSettings.ContractResolver = new DefaultContractResolver(); } }). AddVersionedApiExplorer(o =&gt; o.GroupNameFormat = "1.0");
  • 关于同时使用 AddMvcCore AddMVC 我错了。请参阅Swagger sample. Why MVC services are registered twice?中的答案

标签: asp.net-core swagger swashbuckle


【解决方案1】:

好的,我已经重现了你的问题,发现原因是GroupNameFormat选项中的值。

如果很快,您应该指定version format,而不是 const 版本字符串。由于您希望 url 中的版本为 1.0,您可以使用:

services.AddMvcCore().AddVersionedApiExplorer( o => o.GroupNameFormat = "VVVV" );

来自文档中的Version Format 部分:

格式说明符:VVVV

描述:主要、次要版本和状态

示例:1-RC -> 1.0-RC、1.1 -> 1.1、1 -> 1.0

【讨论】:

    【解决方案2】:

    关于AddMvcCore()AddMvc()

    来自https://github.com/domaindrivendev/Swashbuckle.AspNetCore 的招摇文档

    Swashbuckle 严重依赖 ApiExplorer,这是 ASP.NET Core 附带的 API 元数据层。如果您使用 AddMvc 帮助程序来引导 MVC 堆栈,则 ApiExplorer 将自动注册,SB 将正常工作。但是,如果您将 AddMvcCore 用于更配对的 MVC 堆栈,则需要显式添加 Api Explorer 服务:

    services.AddMvcCore().AddApiExplorer();
    

    如果您还想要AddVersionedApiExplorer(),请将其链接在AddApiExplorer() 之后

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-05
      • 2017-10-23
      • 2020-11-30
      • 2018-06-30
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多