我已经设法弄清楚了大约一个星期。是时候问S.O. 我在这里有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参数(由规范定义的复杂对象)。实际上,这对于客户端生成和服务器端都起到了不错的作用。问题是,大张旗鼓的用户界面看起来真的很la脚。您实际上不能很好使用的单个TEXT框。如果我能弄清楚如何使Swagger UI更改[FromUri]请求的外观,使其与[FromBody] UI更加匹配,那么我在这里将处于良好状态。有什么想法或现有的内容可以在这里指出正确的方向吗?
答案 0 :(得分:2)
Swagger不是限制-REST本身就是限制。根据REST的定义,Web服务器应忽略所有HTTP GET方法上的传入请求正文。 ASP.NET强制执行此约定,这就是为什么您不允许在GET方法上使用[FromBody]
的原因。
在设计REST API时,更好的做法是使用POST方法进行实际搜索。这将允许使用[FromBody]
,作为奖励,Swagger将按照您希望的方式运行。请参阅此处以获取支持意见:https://stackoverflow.com/a/18933902/66101