#.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