Я пытаюсь стандартизировать модель расширения для нашей команды разработчиков REST API. Нам необходимо обеспечить стандартную реализацию маршрутов, позволяя также настраивать реализации маршрутов, которые также заменяют значение по умолчанию.Как переопределить веб-маршрут api?
В качестве простого примера, если у нас есть GET маршрут api/users
так:
public class DefaultUsersController : ApiController
{
[HttpGet]
[Route("api/users", Order = 0)]
public IEnumerable<string> DefaultGetUsers()
{
return new List<string>
{
"DefaultUser1",
"DefaultUser2"
};
}
}
Мы ожидаем, что работы по умолчанию, как это:
Теперь разработчик хочет изменить поведение этого маршрута, он должен иметь возможность просто определить тот же маршрут с , чтобы какой-то механизм предполагал, что их реализация должна быть использована, а не по умолчанию , Мое первоначальное мышление состояло в том, чтобы использовать Order property on the Route attribute, поскольку именно так оно и есть, как способ обеспечить приоритет (в порядке возрастания), когда обнаружен двусмысленный маршрут. Однако это не работает таким образом, рассмотреть эту пользовательскую реализацию, что мы хотим переопределить по умолчанию api/users
маршрут по:
public class CustomUsersController : ApiController
{
[HttpGet]
[Route("api/users", Order = -1)]
public IEnumerable<string> CustomGetUsers()
{
return new List<string>
{
"CustomUser1",
"CustomUser2"
};
}
}
Обратите внимание на свойство заказа устанавливается в -1, чтобы придать ему более низкое значение приоритета, чем по умолчанию, который установлен на 0. Я бы подумал, что это будет использоваться DefaultHttpControllerSelector, но это не так. Из DefaultHttpControllerSelector
:
И мы в конечном итоге с этим исключением возвращается в ответ:
Можно ли Microsoft просто пропустил логики/требование использовать Order
как Маршрутный рассогласование, и это ошибка? Или есть еще один простой способ переопределить маршрут, надеюсь, с атрибутом?