Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为通用REST调用生成Swagger UI_Rest_Asp.net Core_Swagger_Swagger Ui_Swashbuckle - Fatal编程技术网

为通用REST调用生成Swagger UI

为通用REST调用生成Swagger UI,rest,asp.net-core,swagger,swagger-ui,swashbuckle,Rest,Asp.net Core,Swagger,Swagger Ui,Swashbuckle,我想要什么: 我希望能够生成将键/值传递到URL的招摇过市文档。这样我就可以使用泛型参数控制器来处理我的请求,比如字典 如果swagger不能生成它,有没有一种方法可以通过在我的对象上使用反射来生成文档?这样,我仍然可以使用泛型方法 如果不是,那么让每个人都知道正确方法的最佳方式是什么 我为什么想要它 public async Task<IActionResult> Patch(int id, Dictionary<string, string> viewModel) {

我想要什么:

我希望能够生成将键/值传递到URL的招摇过市文档。这样我就可以使用泛型参数控制器来处理我的请求,比如字典

如果swagger不能生成它,有没有一种方法可以通过在我的对象上使用反射来生成文档?这样,我仍然可以使用泛型方法

如果不是,那么让每个人都知道正确方法的最佳方式是什么

我为什么想要它

public async Task<IActionResult> Patch(int id, Dictionary<string, string> viewModel)
{
    return await ConnectionWrapper(() => connector.Patch(id, viewModel));
}
我正在开发一个新的API,并使用swagger创建文档。在这个API中,我想使用一些通用方法来防止硬编码。例如,在
PATCH
方法中,我使用
Dictionary
获取属性/值组合,在
get
中,我使用自定义对象作为参数。在这两种情况下,swagger都无法生成正确的参数字段,因为它将参数作为url键

示例动作和形式-不正确

public async Task<IActionResult> Patch(int id, Dictionary<string, string> viewModel)
{
    return await ConnectionWrapper(() => connector.Patch(id, viewModel));
}
公共异步任务修补程序(int-id,Dictionary-viewModel)
{
return wait ConnectionWrapper(()=>connector.Patch(id,viewModel));
}

这将使用主体,而不是查询

其他示例-不正确

public async Task<IActionResult> Patch(int id, Dictionary<string, string> viewModel)
{
    return await ConnectionWrapper(() => connector.Patch(id, viewModel));
}
在GET中,我有一个带有自定义modelbinder的模型来处理所有RESTURL参数。问题是因为模型是定义的,它将过滤器视为一个属性

然后它会出现在URL中,但它看起来像,而不是

所需输出

public async Task<IActionResult> Patch(int id, Dictionary<string, string> viewModel)
{
    return await ConnectionWrapper(() => connector.Patch(id, viewModel));
}

我已经修改了HTML以模拟上面图片中我想要的内容。将被调用的URL将是

我不介意是否只有一个选项可以添加通用键/值对,因为有了它,我可以演示我想要什么

预期解决方案


我认为解决方案在于swagger的
MapType
启动方法或
IOperationFilter
的实现,但我还没有找到答案。

看起来这还不受支持:我知道它不受开箱即用的支持,但由于几乎所有关于REST的最佳实践都采用了这种url参数的用法,我想我不是唯一一个这样做的人,也许有人知道解决方法。或者至少如何使用swagger,这样我可以告诉用户正确的方法应该是什么。swagger 2.0(您正在使用的)实际上不支持查询字符串中的字典。最新的规范OpenAPI 3.0支持它。您可能需要等待,直到Swashback和Swagger UI都实现该功能。或者自己实现并提交PR。最新版本似乎支持OpenAPI 3.0,您应该重新测试并告诉我们它是否有效:)