Я перевожу полный проект REST .NET Framework Web API 2 в ASP.NET Core 2.2 и немного теряюсь в маршрутизации.
В Web API 2 мне удалось перегрузить маршруты с одинаковым количеством параметров в зависимости от типа параметра, например, Я мог бы иметь Customer.Get(int ContactId)
и Customer.Get(DateTime includeCustomersCreatedSince)
, и входящие запросы были бы соответственно направлены.
Мне не удалось добиться того же в .NET Core, я либо получаю ошибку 405 или 404, и вместо этого эта ошибка:
"{\" error \ ": \" Запрос соответствует нескольким конечным точкам. Совпадения: \ r \ n \ r \ n [AssemblyName] .Controllers.CustomerController.Get ([AssemblyName]) \ r \ n [AssemblyName] .Controllers.CustomerController.Get ([AssemblyName]) \ "}"
Это был рабочий код в моем полном приложении .NET Framework Web API 2:
[RequireHttps]
public class CustomerController : ApiController
{
[HttpGet]
[ResponseType(typeof(CustomerForWeb))]
public async Task<IHttpActionResult> Get(int contactId)
{
// some code
}
[HttpGet]
[ResponseType(typeof(List<CustomerForWeb>))]
public async Task<IHttpActionResult> Get(DateTime includeCustomersCreatedSince)
{
// some other code
}
}
И это то, к чему я преобразовал это в Core 2.2:
[Produces("application/json")]
[RequireHttps]
[Route("api/[controller]")]
[ApiController]
public class CustomerController : Controller
{
public async Task<ActionResult<CustomerForWeb>> Get([FromQuery] int contactId)
{
// some code
}
public async Task<ActionResult<List<CustomerForWeb>>> Get([FromQuery] DateTime includeCustomersCreatedSince)
{
// some code
}
}
Приведенный выше код работает, если я закомментирую один из Get
методов, но завершается неудачей, как только у меня есть два Get
метода. Я ожидал, что FromQuery
будет использовать имя параметра в запросе для управления маршрутизацией, но это не так?
Можно ли перегрузить метод контроллера, подобный этому, когда у вас одинаковое количество параметров и маршрут, основанный на типе параметра или имени параметра?