Уровень контроллера
[Route("employee/members")]
Маршрут метода 1)
[HttpGet] [Route("memberSearch/{searchValue}")]
Маршрут метода 2)
[HttpGet] [Route("{memberID}")]
Сценарий 1: http://localhost/api/applications/employee/members/memberSearch/Jacob Это приведет к маршруту 1
Сценарий 2: http://localhost/api/applications/employee/members/memberSearch/ Это приведет к маршруту 2 с memberID = «memberSearch», что неверно, поскольку страница поиска будет пытаться получить полный доступ к методу
я знаю, что могу добавить маршрут 2 как
[Route("memberID/{memberID}")]
, но это не очень хороший стандарт API отдыха
Поскольку вы хотите выполнить поиск, я бы обычно использовал базовый маршрут http://localhost/api/applications/employee/members с добавленным параметром запроса name, чтобы вы могли сделать http://localhost/api/applications/employee/members?name=Jacob. Использование параметров запроса позволит вам быть более гибкими с вашими поисками в будущем, например, добавление нумерации страниц будет выглядеть так: http://localhost/api/applications/employee/members?name=Jacob&page=2.
Использование вышеуказанного позволит вашим маршрутам не перекрываться и если вы хотите сделать маршрут поиска более уникальным, просто измените атрибут HttpGet на [HttpGet("search")], в результате чего http://localhost/api/applications/employee/members/search?name=Jacob
[HttpGet("search")]
[ApiController] [Route("employee/members")] public class YourControllername : ControllerBase { [HttpGet] public IActionResult Search([FromQuery] string name) { // Provide Search Functionality Here } [HttpGet("{memberID}")] public IActionResult Get(string memberID){ // More code here } }
Измените свой маршрут, как показано ниже, чтобы сделать searchValue необязательным:
searchValue
[HttpGet] [Route("memberSearch/{searchValue?}")]
Результат: