Я заметил кое-что странное с моими .Net Core 3.1 и .Net Core 5 Apis. Когда существует 2 разных метода GET для получения всех записей и одна запись по идентификатору, параметры на основе маршрута работают, а параметры строки запроса - нет.
Вот пример кода
using Core5TestApi.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Core5TestApi.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class DataController : ControllerBase
{
private readonly ILogger<DataController> _logger;
List<Data> allData = new List<Data>{
new Data { Id = 1, Name = "Name 1" },
new Data { Id = 2, Name = "Name 2" }
};
public DataController(ILogger<DataController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<Data> GetAll ()
{
return allData;
}
[HttpGet("{id}")]
[Route("{id}")]
public Data Get(int id)
{
return allData.First(i => i.Id == id);
}
}
}
Ниже приведены URL-адреса и результаты.
Вызов: http: // localhost: 51672 / api / data Результат: [{id: 1, name: Name 1}, {id: 2, name: Name 2}]
Вызов: http: // localhost: 51672 / api / data / 1 Результат: {id: 1, name: Name 1}
Вызов: http: // localhost: 51672 / api / data? Id = 1 Результат: [{id: 1, name: Name 1}, {id: 2, name: Name 2}]
Последний результат игнорирует параметр querystring и выполняет GetAll.
Мне кажется, что мне не хватает чего-то очень простого, хотя я считаю, что видел эту работу раньше
Я также попытался установить атрибут [FromQuery] перед параметром в методе Get. Это фактически нарушает путь параметра на основе маршрута