Другой тип возвращаемого значения из-за доступных или нет параметров запроса

#.net #asp.net-core #asp.net-core-webapi

#.net #asp.net-core #asp.net-core-webapi

Вопрос:

У меня проблема с «шаблоном», которую я не могу решить при создании API с .NET CORE 3.1.

У меня есть CustomerController и мне нужно вернуть всех клиентов, если параметры запроса не передаются с типом возвращаемого значения IEnumerable<CustomerDTO> . Если передан один параметр запроса ( customerName ), мне нужно вернуть только одного клиента (первого, которого я нашел с помощью своей логики).

Эта реализация вызывает проблему во время выполнения, поскольку приложение не может перенаправить на правильный контроллер:

 Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: The request matched multiple endpoints. Matches: 

MyApi.Controllers.CustomersController.GetCustomerTours (MyApi)
MyApi.Controllers.CustomersController.GetCustomerTours (MyApi)
  

Это методы:

 [HttpGet]
public async Task<ActionResult<IEnumerable<CustomerDTO>>> GetCustomerTours()
  
 [HttpGet]
public async Task<ActionResult<CustomerDTO>> GetCustomerTours(string customerName)
  

и это то, что я хочу получить при вызове API:

../customers

../customers?customerName=myCustomerName

Как я могу сообщить своему API, что мне нужен вызов определенного метода в зависимости от наличия параметра запроса или нет?

Ответ №1:

(1)

 [HttpGet]
public async Task<ActionResult<IEnumerable<CustomerDTO>>> GetCustomerTours()
  

для

 ../customers
  

(2)

 [HttpGet("{customerName}")]
public async Task<ActionResult<CustomerDTO>> GetCustomerTours(string customerName)
  

для

 ../customers/myCustomerName
  

Ссылка: https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.1amp;tabs=visual-studio#routing-and-url-paths , например

введите описание изображения здесь

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

1. Спасибо. Я попробовал также второй пункт, который вы пишете. Нормально ли, что нет разницы для вызова ../customers/myCustomerName или ../customers?myCustomerName