如何配置swagger以使复杂的[FromUri] GET参数在Swagger中很好地显示



我已经试图解决这个问题大约一个星期了。是时候问问 S.O. 我这里有 4 个总体目标:

  1. 出于验证原因,控制器代码需要使用视图模型请求输入。(控制器代码段(
  2. 我的 API 的客户端代码应该使用很好的模型语法。(客户端代码片段(
  3. 对于招摇的UI页面,我希望"试用我"界面可用。一堆文本框,或者一个文本区域,供 json blob 序列化和发送。
  4. 获取请求

客户端代码片段:

var response = client.GetUserProductHistory(new Models.UserProductHistoryRequest() {
Locale = "en-US",
UserPuid = "FooBar"
});

控制器代码段

[HttpGet]
[HasPermission(Permissions.CanViewUserProductHistory)]
public JsonPayload<UserProductHistoryResponse> GetUserProductHistory([FromUri]UserProductHistoryRequest model)
{
JsonPayload<UserProductHistoryResponse> output = new JsonPayload<UserProductHistoryResponse>();
return output;
}

我试过使用[FromBody]。它看起来很棒,但我收到一个错误,说"GET请求不支持FromBody"。 我尝试使用 [FromUri],但随后生成的客户端在生成的客户端中每次调用都给了我 15 个方法参数。 我尝试使用 [FromUri] 和操作过滤器,以便将参数压缩为 Ref 参数(规范定义的复杂对象(。这实际上适用于客户端生成和服务器端。问题是,招摇的 UI 看起来真的很蹩脚。一个你实际上不能很好地使用的文本框。如果我能弄清楚如何让 Swagger UI 更改 [FromUri] 请求的外观以更紧密地匹配 [FromBody] UI,我将在这里处于良好状态。有什么想法或预先存在的内容可以在这里为我指明正确的方向吗?

Swagger 不是限制 - REST 本身就是。根据 REST 的定义,Web 服务器应忽略所有 HTTP GET 方法上的传入请求正文。ASP.NET 强制实施此约定,这就是为什么它不允许在 GET 方法上使用[FromBody]

在设计 REST API 时,更好的做法是使用 POST 方法进行实际搜索。这将允许使用[FromBody],作为奖励,Swagger 将按照您想要的方式运行。有关支持意见,请参见此处:https://stackoverflow.com/a/18933902/66101

相关内容

  • 没有找到相关文章