更新:我开始怀疑这是否是由于错误:
https://github.com/domaindrivendev/Swashbuckle/issues/590
但这里提出的解决办法似乎并没有解决我的问题。
我正在使用SwashBuckle为C#ASP.NETWeb API项目生成API留档。
我的目标是允许以下作为有效URL:
/endpoint/items/123/foo?param2=bar
其中必需参数(param1)设置为“foo ”,可选参数(param2)设置为“bar”。我希望两个参数都包含在一个C#参数对象中。(带有其他可选参数,如param3等)。几个endpoint将使用相同的参数,我希望有一个单一的对象代表参数。
Swagger/Swashuckle的细节大多是一个黑匣子,我无法弄清楚。我在参数列表中得到重复。
重现问题的示例代码:
// 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;}
}
使用第二种方法,我接收单个对象中的参数。但是斯瓦格显示了“参数1”的重复条目。
屏幕截图:Swagger 重复参数
如何使Swagger/Swashblock不显示“param1”的第二个条目?
使用这种结构的原因是我有多个返回不同类型数据的endpoint,但它们使用通用参数。一些参数是必需的(以及ID的prt),因此我们希望在URL中包含这些参数,在查询字符串中包含可选参数。我更希望通用参数对象应该包括必需和可选参数。
使用Visual Studio 2015更新创建的示例代码1.默认ASP.NETWeb API项目。将上面的代码添加到生成的ValuesController.cs.已安装包Swashuckle 5.3.1依赖项。
当Swashuckle生成它的swagger.json文件时,它会查看路由和查询参数,因此当您使用Get(string参数1, string参数2...)
自动告诉Swashuckle这些参数是必需的(因为它们没有设置为=null
)
当使用Get([FromUri(Name = "")]MyParams myParams)
Swashuckle在模型中查找数据注释(System.ComponentModel.DataAnnotations)时,告诉阉羊是否需要参数。
将参数1设置为必需
public class MyParams
{
[Required]
public string Param1 { get; set;}
public string Param2 { get; set;}
public string Param3 { get; set;}
}
更新:找到了一个解决方法。很难看:
然后Swagger将拾取方法参数并为这个留档。ASP.Net将参数分配给方法参数和参数对象,允许代码使用参数对象。
/// <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实际上迫使我更改我的(完全工作的)代码以生成文档。
除非有人能提出合适的解决方案,否则我认为最好的解决方案是使用简单的方法参数。
在我的python-flask应用程序中,我将https://github.com/rochacbruno/flasgger用于swagger。我需要在参数值中发送一个字典(或json)数组。但是我在swagger的文档(https://swagger . io/docs/specification/2-0/descripting-parameters/)中找不到任何这样的类型。对于用户如何实现这
下面的两个查询给出了一些输出, 我不了解工作流程。它是如何输出的。谁能帮我解释一下吗。
问题内容: 使用第三方API,我观察到以下内容。 而不是使用 它使用类似 我得到分配的“输出”字符串。 我很好奇实现这种功能的原因。使用此类输出参数的优点是什么? 问题答案: 在您的示例中有不对的地方。 在上面的程序中,将输出字符串“ foo”, 而不是 “ Hello World”。 某些类型是可变的,在这种情况下,您可以修改传递给函数的对象。对于不可变的类型(例如),您必须构建某种包装类,而可
我在写我的招摇文件时遇到了问题。当我描述一个参数时,这个参数的$ref的描述重载了这个描述(参见下面的示例)。 结果:描述过载 谁能帮我渡过难关吗?
我是新的反应,我有一个问题,如何获得另一个组件的onclick值。
我如何在从下面的API生成的swagger中定义属性的默认值? Swashbuckle生成OrderDirection作为所需参数。我希望它是可选的,并向客户机指示默认值(不确定swagger是否支持此选项)。 我不喜欢使属性类型为空。还有其他选择吗?理想情况下使用内置类... 我用的是虚张声势的皮带扣。AspNetCore-https://docs.microsoft.com/en-us/asp