DECLARE @DistinctFilteringCriteria TINYINT;
SELECT @DistinctFilteringCriteria = COUNT(DISTINCT [vcFilterType])
FROM @FilterDataSource;
WITH DataSource AS
(
SELECT DS.*
,COUNT([vcDemographicType]) OVER (PARTITION BY [biPostId]) AS [FilteringCriteriaMatched]
FROM @DataSource DS
INNER JOIN @FilterDataSource FDS
ON DS.[vcDemographicType] = FDS.[vcFilterType]
AND DS.[vcDemographicValue] = FDS.[vcFilterValue]
)
SELECT [biDemographicId], [biPostId], [vcDemographicType], [vcDemographicValue]
FROM DataSource
WHERE [FilteringCriteriaMatched] = @DistinctFilteringCriteria;
上述API有三个可选参数,将作为查询字符串传递
用户无法在swagger UI中输入这些可选查询参数。请指导我实现可选的查询参数。
我正在使用swashbuckle,我更喜欢使用注释,而不是对每个API方法都有冗长的评论部分,以便实现swagger功能。
我引用了以下Adding Query String Params to my Swagger Specs并在Web API的过滤器文件夹中创建了 SwaggerParameterAttribute 类,并尝试添加 OperationFilter 在G lobalConfiguration.Configuration中 .EnableSwagger 如给定,它抛出类型或命名空间名称 SwaggerParametersAttributeHandler 找不到。我甚至添加了过滤器文件夹命名空间,但仍然存在错误。
请指导如何在swagger
中实现可选查询参数答案 0 :(得分:5)
Swagger的工作方式是根据你的Action的签名,即你的Action的参数来提取参数,但是你在这里从ControllerContext获得这些值,这显然是Swagger永远不会知道的。
所以你需要更改Action的签名并在那里传递你的参数。
如果您将它们设为可为空的类型 -
,它们将被视为可选项void create()
{
int random;
for (int i = 0; i < 10; i++)
{
struct node *new_node, *current;
new_node = new node;
random = randomNum();
new_node->data = random;
new_node->next = NULL;
if (start == NULL)
{
start = new_node;
current = new_node;
new_node = NULL;
}
else
{
current->next = new_node;
current = new_node;
}
}
}
void display()
{
struct node *new_node;
new_node = start;
while (new_node != NULL)
{
cout << new_node->data << "->";
new_node = new_node->next;
}
}
答案 1 :(得分:1)
这对我有用:
[System.Web.Http.HttpGet]
[Route("api/DoStuff/{reqParam}")]
[Route("api/DoStuff/{reqParam}/{optParam1:alpha?}/{optParam2:datetime?}")]
public string Get(string reqParam, string optParam1= "", string optParam2= "")
它确实在Swagger用户界面中创建了两个部分,但对我有用。