Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Swagger中的重复参数输出

Swagger中的重复参数输出
EN

Stack Overflow用户
提问于 2016-02-18 01:57:55
回答 2查看 4.3K关注 0票数 8

更新:我开始怀疑这是否是因为一个bug:

https://github.com/domaindrivendev/Swashbuckle/issues/590

但解决办法似乎并没有解决我的问题。

我使用Swashbuckle为C# ASP.NET Web项目生成API文档。

我的目标是允许以下内容作为有效的URL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/endpoint/items/123/foo?param2=bar

将必需参数(param1)设置为"foo“,将可选参数(param2)设置为"bar”。我希望两个参数都包含在单个C#参数对象中。(使用其他可选参数,如param3等)。几个端点将使用相同的参数,我希望有一个表示参数的对象。

Swagger/Swashbuckle的细节主要是一个黑匣子,我无法弄清楚这一点。我在参数列表中得到了副本。

再现问题的示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // This endpoint is generating documentation the way I would like.
    [HttpGet]
    [Route("endpoint1/items/{id}/{param1}")]
    public string GetDataForParameters(int id, string param1, string param2 = null, string param3 = null)
    {
        return string.Format("Params: {1}, {2}, {3}", id, param1, param2, param3);
    }

    // This endpoint has the structure I would like, but I get duplicates for param1 in the documentation.
    [HttpGet]
    [Route("endpoint2/items/{id}/{param1}")]
    public string GetDataForParameters(int id, [FromUri(Name = "")]MyParams myParams)
    {
        return string.Format("Params: {1}, {2}, {3}", id, myParams.Param1, myParams.Param2, myParams.Param3);
    }

    public class MyParams
    {
        public string Param1 { get; set;}
        public string Param2 { get; set;}
        public string Param3 { get; set;}
    }

使用第二个方法,我接收单个对象内的参数。但是Swagger会为"param1“显示一个重复条目。

截图:摆幅重复参数

如何使Swagger/Swashbuckle不显示"param1“的第二个条目?

之所以有这种结构,是因为我有多个端点,它们返回不同类型的数据,但它们使用公共参数。有些参数是必需的(以及ID的prt ),因此我们希望将这些参数包含在URL中,并在查询字符串中包含可选参数。我希望公共参数对象应该包括必需参数和可选参数。

用VisualStudio2015UPDATE 1创建的示例代码。默认ASP.NET Web项目。将上面的代码添加到生成的ValuesController.cs中。安装的软件包Swashackle5.3.1+依赖项。

EN

回答 2

Stack Overflow用户

发布于 2016-02-18 03:17:40

更新:找到了解决办法。太丑了:

  1. 在该方法中引入一个显式重复参数。
  2. 将JsonIgnore属性添加到参数对象中的重复属性。

Swagger随后将获取该方法参数和文档。ASP.Net将为方法参数和参数对象指定参数,从而允许代码使用参数对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /// <param name="param1">URL parameters must be documented on this level.</param>
    [HttpGet]
    [Route("endpoint2/items/{id}/{param1}")]
    public string GetDataForParameters(int id, string param1, [FromUri(Name = "")]MyParams myParams)
    {
        // the param1 method parameter is a dummy, and not used anywhere.
        return string.Format("Params: {1}, {2}, {3}", id, myParams.Param1, myParams.Param2, myParams.Param3);
    }

    public class MyParams
    {
        /// <summary>
        /// Cannot add documentation here, it will be ignored.
        /// </summary>
        [JsonIgnore]
        public string Param1 { get; set;}
        /// <summary>
        /// This is included. Querystring parameters can be documented in this class.
        /// </summary>
        public string Param2 { get; set;}
        public string Param3 { get; set;}
    }

我不会使用这种方法,对于任何其他阅读代码的开发人员来说,这都太令人困惑了。因此不幸的是,Swagger/Swashbuckle实际上迫使我更改我的(完全工作的)代码,以生成文档。

除非有人能提出适当的解决方案,我认为最好的解决办法是有简单的方法参数。

票数 2
EN

Stack Overflow用户

发布于 2016-02-23 05:28:06

当Swashbuckle生成它的swagger.json文件时,它会查看路由和查询参数,所以当您使用Get(string param1, string param2 ..)时,它会自动告诉Swashbuckle这些参数是必需的(因为它们没有被设置为= null)。

当使用annotations(System.ComponentModel.DataAnnotations)在您的模型中查找数据时,告诉是否需要参数。

将Param1设置为必需

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyParams
    {
        [Required]
        public string Param1 { get; set;}
        public string Param2 { get; set;}
        public string Param3 { get; set;}
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35478197

复制
相关文章
真正彻底卸载ie8的某些加载项
但是,有的加载项“删除”不可选的,这时如果是你不想要的或流氓加载项咋办?如果你不只是禁用掉它,还需要永久删除掉它,怎么办?
williamwong
2018/07/24
8320
真正彻底卸载ie8的某些加载项
分离链接的散列散列代码实现
散列 散列为一种用于以常数平均时间执行插入,删除和查找的技术。一般的实现方法是使通过数据的关键字可以计算出该数据所在散列中的位置,类似于Python中的字典。关于散列需要解决以下问题: 散列的关键字如何映射为一个数(索引)——散列函数 当两个关键字的散列函数结果相同时,如何解决——冲突 散列函数 散列函数为关键字->索引的函数,常用的关键字为字符串,则需要一个字符串->整数的映射关系,常见的三种散列函数为: ASCII码累加(简单) 计算前三个字符的加权和$\sum key[i] * 27^{i}$ (不太
月见樽
2018/04/27
1.5K0
散列/散列函数「建议收藏」
每个关键字被映射到从0-TableSize-1这个范围中的某个数,并且被放到适当的单元中。这种映射就叫做散列函数
全栈程序员站长
2022/08/28
8930
散列/散列函数「建议收藏」
散列算法与散列码
一、引入 1 /** 2 * Description:新建一个类作为map的key 3 */ 4 public class Groundhog 5 { 6 protected int number; 7 8 public Groundhog(){ 9 } 10 public Groundhog(int number) 11 { 12 this.number = number; 13 } 14 15 @Overr
JMCui
2018/03/15
1.5K0
散列算法与散列码
散列
将一个元素的关键码和存储位置之间建立对应的函数关系 Hash( ), 使得每个关键码与结构中的唯一的存储位置相对应:
Rikka
2022/02/07
1.8K0
散列
选择键值,冲突的时候采取不同的策略 散列函数: 简单的散列函数: 1 int hash(const string & key,int tableSize) 2 { 3 int hashVal = 0; 4 for(int i = 0; i < key.length();++i) 5 { 6 hashVal + = key[i]; 7 } 8 return hashVal % tableSize; 9 } 比较好的散列函数: 1 int hash( c
用户1154259
2018/01/17
8140
散列查找和哈希查找_散列检索
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:
全栈程序员站长
2022/11/15
8990
使用VBA遍历数据验证列表中的每一项
想要遍历数据验证列表中的每一项,如何编写VBA代码呢?如果数据验证列表中的项值来源于单元格区域或者命名区域,则很简单,遍历该区域即可。然而,有些数据验证列表是直接使用逗号分隔的项添加的,这就需要使用不同的方法。
fanjy
2023/08/29
4900
使用VBA遍历数据验证列表中的每一项
散列冲突
概念:如果当一个元素被插入时与一个已经插入的元素散列到相同的值, 那么就会产生冲突, 这个冲突需要消除。解决这种冲突的方法有几种:本章介绍两种方法:分离链接法和开放定址法
全栈程序员站长
2022/08/27
5960
Hash散列[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146553.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/27
6720
遍历ArrayList,并删除某些元素的方法实现「建议收藏」
本文是根据 https://blog.csdn.net/qq_32575047/article/details/78902254 的帖子进行整理的,在此感谢一下。
全栈程序员站长
2022/11/14
4380
散列函数
散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。
233333
2019/09/24
9200
散列查找
散列同顺序、链接和索引一样,是又一种数据存储方法。散列存储的方法是:以数据集合中的每个元素的关键字k为自变量,通过一种函数h(k)计算出函数值,把这个值用做一块连续存储空间(即数组或文件空间)中的元素存储位置(即下标),将该元素存储到这个下标位置上。散列存储中使用的函数h(k)被称为散列函数或哈希函数,它实现关键字到存储位置(地址)的映射(或称转换),h(k)被称为散列地址或哈希地址;使用的数组或文件空间是对数据集合进行散列存储的地址空间,所以被称为散列表或哈希表。在散列表上进行查找时,首先根据给定的关键字k,用与散列存储时使用的同一散列函数h(k)计算出散列地址,然后按此地址从散列表中取出对应的元素。
全栈程序员站长
2022/08/27
1.2K0
散列查找
详解Echarts中的配置项
我把Echarts中常用的标题、图例、提示框、工具栏等配置项归类到Echarts 图表的基本配置项。各个配置项主要的配置参数如下:
九仞山
2023/10/14
8260
PHP:返回指定页码数集合项的新集合
PHP内置了 array_slice(array,start,length,preserve) 方法就可以实现这个了,然后还可以简单封装一下
Alone88
2019/10/21
7140
java检验数组重复_java – 如何遍历数组并检查重复项?「建议收藏」
您可以使用嵌套循环遍历数组以查看新输入是否存在.在函数中执行此操作会更好.此外,在执行此操作时,您需要确保您不在第一个元素,否则您将获得空指针异常.
全栈程序员站长
2022/09/29
1.4K0
MySql缓存中的关键项
MySql的设计中大量使用了缓存,下面这些缓存配置项是应该熟知的 key_buffer_size key_buffer_size是设置MyISAM表索引的缓冲区大小,此参数对MyISAM表性能影响最大 对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB table_cache table_cache是指表高速缓存的大小。当MySQL访问一个表时,如果在MySQL表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容 一般通过查看 Open_tabl
dys
2018/04/02
1.3K0
iView使用中的注意项
官网 https://www.iviewui.com/components/table Table <template> <div> <Table border :columns="table_header" :data="table_data"> <template slot-scope="{ row }" slot="name"> <strong>{{ row.name }}</strong> </template> <template s
码客说
2021/11/12
1.1K0
浅谈散列运算
“指纹”一词形象地描述了散列运算的结果。在现实生活中,两个人可能长得很像,但是他们的指纹不同,根据指纹就能对这两个人进行区分。
小蜜蜂
2019/07/24
1.1K0
浅谈散列运算
搜索引擎中的URL散列
散列(hash)也就是哈希,是信息存储和查询所用的一项基本技术。在搜索引擎中网络爬虫在抓取网页时为了对网页进行有效地排重必须对URL进行散列,这样才能快速地排除已经抓取过的网页。最理想的状态是对联网上所有的网页都分配一个哈希地址,可想而知这是一个相当宠大的数字,但实际上往往是无法做到这一点。虽然google、百度都是采用分布式的机群进行哈希排重,但实际上也是做不到所有的网页都分配一个唯一散列地址。但是可以通过多级哈希来尽可能地解决,但却要会出时间代价在解决哈希冲突问题。所以这是一个空间和时间相互制约的问题,我们知道哈希地址空间如果足够大可以大大减少冲突次数,所以可以通过多台机器将哈希表根据一定的特征局部化,分散开来,每一台机器都是管理一个局部的散列地址。
Java架构师必看
2021/03/22
1.7K0

相似问题

在nodejs和镜像上使用HTML5

12

NodeJS + Websockets + HTML5视频标签和‘流媒体’

11

通过nodejs服务html5

10

NodeJS + HTML5 + Telnet =可能吗?

10

NodeJS和HTML5 Websockets不能一起工作

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文