Я исправил эту проблему, прочитав часть 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;
}