URL-адрес для ОТДЫХА — пользователь по идентификатору и имени

#c# #.net-core #asp.net-core-webapi #asp.net-core-routing

Вопрос:

У меня есть два действия:

 [HttpGet]
[Route("Users/{id}")]
public async Task<IActionResult>GetUser(int id)

[HttpGet]
[Route("Users")]
public async Task<IActionResult>GetUser(string name)
 

Когда я пытаюсь позвонить /Пользователям?имя=aaa, я получаю следующую ошибку:

Майкрософт.AspNetCore.Маршрутизация.Соответствие.Исключение AmbiguousMatchException: Запрос совпал с несколькими конечными точками. Матчи:

Что я делаю не так?

———— Я заметил, что у меня есть еще одно действие: [HttpGet] публичные асинхронные предложения задач() Это было причиной, извините

Ответ №1:

Если вы хотите получить данные из строки запроса, вам необходимо использовать атрибут FromQueryAttribute

 // e.g. Users/10
[HttpGet]
[Route("Users/{id:int}")]
public async Task<IActionResult>GetUser([FromRoute] int id)

// e.g. Users?name=John
[HttpGet]
[Route("Users")]
public async Task<IActionResult>GetUser([FromQuery] string name)
 

Комментарии:

1. Я заметил, что у меня есть еще одно действие: [HttpGet] public async TaskGetOffers() Это было причиной, извините и спасибо вам

Ответ №2:

попробуйте использовать приведенный ниже код

 [HttpGet]
[Route("Users/{id}")]
public async Task<IActionResult>GetUser([FromQuery] int id)

[HttpGet]
[Route("Users")]
public async Task<IActionResult>GetUser([FromQuery]string name)
 

Комментарии:

1. Я заметил, что у меня есть еще одно действие: [HttpGet] public async TaskGetOffers() Это было причиной, извините и спасибо вам

Ответ №3:

Можете ли вы перейти с

 [Route("Users")]
public async Task<IActionResult>GetUser(string name)
 

Для

 [Route("Users/{name}")]
public async Task<IActionResult>GetUser(string name)
 

А также укажите тип вашего маршрута

 [Route("Users/{id:int}")]
 

Комментарии:

1. Хорошо, но как я могу сделать это в строке запроса?