我正在尝试导入我的swagger模式来查看APIM,但是它总是给我提供重复的签名错误。
导入API具有重复的签名操作:两个带有签名'GET /api/v1/brokers/{brokerid}‘的操作;两个带有签名'GET /api/v1//{brokerid}’的操作;两个签名为'GET /api/v1/office/{offices}‘的操作;两个签名为'GET /api/v1/teams/{team}’的操作。
我已经检查了我的API路由和swagger模式,但没有看到任何重复。这个模式更新在2018年5月11日之前运行良好。
我读过发布说明,但什么也找不到。我的终点看起来是这样的。
[Route("{officeId:int:min(1)}", Name = "GetOfficeById")]
public IHttpActionResult GetOfficeById(int officeId, [FromUri] IncludeImageModel includeImage)
[Route("{brokerId:int:min(1)}", Name = "GetBrokerById")]
public IHttpActionResult GetBrokerById(int brokerId, [FromUri] IncludeImageModel includeImage)
[Route("{teamId:int:min(1)}", Name = "GetTeamById")]
public IHttpActionResult GetTeamById(int teamId, [FromUri] IncludeImageModel includeImage)
[Route("MarketReport/{brokerId:int}", Name = "GetMarketReportsByBrokerId")]
public IHttpActionResult GetMarketReportsByBrokerId(int brokerId, [FromUri]CBBainApi.Models.Common common)发布于 2018-05-25 10:49:40
我通过从Path template validation changes中读取发行说明部件解决了这个问题。正如它所说的‘改进重复逻辑’,他们在检查唯一性之前增加了规范化步骤:
如果路径模板包含查询字符串,则?用&字符分隔后的所有段都按字母顺序排序,不区分大小写(没有对=字符的任何特殊处理)。
这意味着,如果您有两个端点,如
[RoutePrefix("brokers")]
public class BrokerController : ApiController
[HttpGet]
[Route("{brokerId:int:min(1)}", Name = "GetBrokerById")]
public IHttpActionResult GetBrokerById(int brokerId, [FromUri] IncludeImageModel includeImage)
[HttpGet]
[Route("{webUrl}", Name = "GetBrokerByWebUrl")]
public IHttpActionResult GetBrokerByWebUrl(string webUrl, [FromUri] IncludeImageModel includeImage)此APIM将通过将它们转换为类似的方式来检查其唯一性:
"brokers/{brokerId:int:min(1)}"到"brokers/{0}","brokers/{webUrl}"到"brokers/{0}"
并且会产生一个重复的签名错误。
两个端点都在移动应用程序中使用,因此我无法选择更改路由,因此我将两个端点合并为
[HttpGet]
[Route("{param}", Name = "GetBroker")]
public IHttpActionResult GetBroker(string param, [FromUri] IncludeImageModel includeImage)
{
int brokerId = default(int);
if (int.TryParse(param, out brokerId))
... do something
else
...do something else
//return something;
}https://stackoverflow.com/questions/50460753
复制相似问题