【问题标题】:Is there a way to custom order endpoints in NSwag?有没有办法在 NSwag 中自定义订单端点?
【发布时间】:2021-03-28 02:21:16
【问题描述】:

我正在使用 NSwag 生成代码文档,但希望能够自定义控制端点出现在生成的 swagger 端点上的顺序。可能通过控制器方法上的属性。

我看不出有什么方法可以做到这一点。其他一些帖子提到了字母数字排序,但我需要能够定义自定义排序。有没有办法做到这一点?

我的 Swagger 配置

public class SwaggerApiConfig
  {
    public Assembly TargetWebAssembly { get; }

    public Action<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>> ConfigureUiSettings { get; }

    public SwaggerApiConfig(
      string uiRoute,
      Assembly targetWebAssembly,
      string apiName,
      string description,
      string team = null,
      string appDocumentationUrl = null)
    {
      if (!uiRoute.StartsWith("/"))
        uiRoute = string.Format("/{0}", (object) uiRoute);
      this.TargetWebAssembly = targetWebAssembly;
      this.ConfigureUiSettings = SwaggerApiConfig.BuildSwaggerUiSettings(uiRoute, this.TargetWebAssembly, apiName, description, team, appDocumentationUrl);
    }

    public SwaggerApiConfig(
      Assembly targetWebAssembly,
      Action<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>> configureUiSettings)
    {
      this.TargetWebAssembly = targetWebAssembly;
      this.ConfigureUiSettings = configureUiSettings;
    }

    public static Action<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>> BuildSwaggerUiSettings(
      string uiRoute,
      Assembly targetWebAssembly,
      string apiName,
      string description,
      string team = null,
      string appDocumentationUrl = null)
    {
      if (!uiRoute.StartsWith("/"))
        uiRoute = string.Format("/{0}", (object) uiRoute);
      return (Action<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>>) (settings =>
      {
        settings.SwaggerUiRoute = uiRoute;
        settings.SwaggerRoute = string.Format("{0}/swagger.json", (object) uiRoute);
        settings.DocExpansion = "list";
        settings.GeneratorSettings.Title = apiName;
        settings.GeneratorSettings.Version = string.Format("{0}", (object) targetWebAssembly.GetName().Version);
        settings.GeneratorSettings.Description = description;
        settings.GeneratorSettings.IgnoreObsoleteProperties = false;
        settings.GeneratorSettings.GenerateKnownTypes = true;
        settings.GeneratorSettings.GenerateAbstractProperties = true;
        settings.GeneratorSettings.DefaultEnumHandling = EnumHandling.String;
        settings.GeneratorSettings.OperationProcessors.Add((IOperationProcessor) new CallerHeaderOperationProcessor());
        
        settings.PostProcess = (Action<SwaggerDocument>) (x =>
        {
          x.Security = (ICollection<SwaggerSecurityRequirement>) new List<SwaggerSecurityRequirement>();
          x.Info.Contact = new SwaggerContact()
          {
            Name = team,
            Url = appDocumentationUrl
          };
        });
      });
    }

然后如何将它应用到我的应用程序管道中

 if (swaggerApiOptions != null)
                {
                    foreach (var swaggerApiConfig in swaggerApiOptions.Configurations)
                    {
                        appBuilder.UseSwaggerUi3(swaggerApiConfig.TargetWebAssembly, swaggerApiConfig.ConfigureUiSettings);
                    }
                }

【问题讨论】:

  • 也许检查github.com/RicoSuter/NSwag/issues/2879):> * RicoSuter:您可以尝试使用文档处理器或后处理重新排序规范中的元素。 > * 塞巴门:怎么样? > * RicoSuter:在 PostProcess 中,您重新排序文档的 Paths 集合...

标签: c# swagger nswag codegen


【解决方案1】:

这很可能不会为您提供所需的一切,但值得指出的是 SwaggerUi3Settings 类包含 OperationsSorter 设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-20
    • 2019-11-28
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2016-09-13
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多