当前位置: 首页 > 知识库问答 >
问题:

如何使用带有Swashback、Swagger和NSwag的定制模型活页夹?

潘宪
2023-03-14

我有一个ASP。NET核心Web API,其中包含以下endpoint。

[HttpGet]
[Route("models/{ids}")]
[Produces(typeof(IEnumerable<Model>))]
public IActionResult Get
(
    [ModelBinder(typeof(CsvModelBinder<string>))] IEnumerable<string> ids
)
{
    // Get models

    return Ok(models);
}

此endpoint获取ID的CSV列表(例如/models/a、b、c),并返回相应模型对象的JSON数组<代码>CsvModelBinder

我现在尝试的是使用NSwag生成一个客户端库,但事实证明这是有问题的,因为Swashback生成的Swagger将ids参数描述为IEnumerable

选项A:有没有办法让Swashback将参数描述为字符串,而不是IEnumerable

选项B:有没有办法告诉NSwag这个IEnumerable


共有2个答案

夹谷烨赫
2023-03-14

可以编写自定义操作过滤器(Swashback)或操作处理器(NSwag),将规范中的给定参数转换为普通字符串。

牟焱
2023-03-14

我想出来了。我需要在S中使用MapType()创建一个自定义模型tartup.cs

public class Csv<T> : List<T> where T : IConvertible
{
    public Csv<T> Append(string delimitedValues)
    {
        var splitValues = delimitedValues
            .Split(',', StringSplitOptions.RemoveEmptyEntries)
            .Cast<string>();

        var convertedValues = splitValues
            .Select(str => Convert.ChangeType(str, typeof(T)))
            .Cast<T>();

        this.AddRange(convertedValues);

        return this;
    }

    public override string ToString()
    {
        return this.Aggregate("", (a,s) => $"{a},{s}").Trim(',');
    }
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddSwaggerGen(c =>
    {
        c.IncludeXmlComments(() => new XPathDocument(new FileStream(Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, "MyApi.xml"), FileMode.Open)));
        c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1"});
        c.MapType<Csv<string>>(() => new Schema { Type = "string", Format = "string" });

    });
}
 类似资料:
  • Im使用swagger和spring boot为我的对象自动生成API文档。但是,我正在使用@JSONanyGetter@JSONanySetter动态地向我的json响应添加字段。如 产生:

  • 我有一个.Net Core v2.1 Web API,它使用NSwag生成其Swagger Json。 我有一个这样的反应模型- 生成Swagger JSON的- 当在JSON上运行swagger代码时,我在我的IO. Swagger项目中获得了以下LoginResault模型,用于C#(选择了目标框架5.0)- 有人可以帮助描述我如何让枚举生成与IO. Swagger中的原始LoginResul

  • 我正在使用Swashback为ASP生成swagger文档。NET核心API我正在写。在我的API中,我使用了许多自定义Json转换器,因此我接收和返回的Json看起来与C类的定义不完全一样。例如,我可能有这样一个类: 它将被序列化为 然而,Swashuckle将其记录为 我如何告诉Swashback我的模型是如何序列化和反序列化的?

  • 基本问题是试图使用自定义数据模型来创建用于deeplearning4j网络的DataSetIterator。 我试图使用的数据模型是一个java类,它包含一系列双打,这些双打是从特定股票的报价中创建的,例如时间戳、打开、关闭、高、低、卷、技术指标1、技术指标2等。我查询了一个internet源示例(也是来自同一站点的其他几个指标),它提供了json字符串,我将这些字符串转换为我的数据模型,以便于访

  • 我正在使用Swashback生成Swagger输出。在我的模型I上,具有以下属性: FieldValue是一个简单的类,可以保存ID和名称: 通过代码中的一些业务逻辑,一组可能的键值对(ID和名称)映射到此属性。 现在,我想在我的Swagger输出中的enum标签中显示所有可能的值。使用ISchemaFilter的一个实现,即MyProperty属性上的一个自定义属性,并使用allOf而不是简单的

  • 我最近提议使用swashuckle将swagger集成到我们的Web API中,以便在内部向我们的工程师公开API功能。对于我们的目的,swagger在生产中没有意义,因为API是后端的......作为一个企业环境,API的数量很大,我可以预见两个主要问题: 程序集的大小约为2.6MB:假设数百个集成了swahbuckle的API构建突然之间,我们所有应用程序的大小都增加了4.5倍。不合理的打击。