Как сконфигурировать роуты в net 6
Разрабатываю REST API на ASP.NET Web API, используя net 6.0. В нем объединили классы Startup и Program.
Необходимо сделать следующие роуты:
[get] https://localhost:5001/api/tle
[get] https://localhost:5001/api/tle?satelliteId = {value}
[get] https://localhost:5001/api/tle?satelliteName = {value}
[Route("api/tle")]
[ApiController]
public class TleController : ControllerBase
{
private readonly RemoteTleProvider _remoteTleProvider;
/// <summary>
/// Инициализирует TleController
/// </summary>
/// <param name="remoteTleProvider"></param>
public TleController(RemoteTleProvider remoteTleProvider)
{
_remoteTleProvider = remoteTleProvider;
}
/// <summary>
/// [HttpGet] api/tle?satelliteId = {?}
/// </summary>
/// <param name="satelliteId"></param>
/// <returns></returns>
[HttpGet]
public async Task<Tle> GetTleBySatelliteId([FromQuery] int satelliteId)
{
return await _remoteTleProvider.GetTleAsync(satelliteId);
}
/// <summary>
/// [HttpGet] api/tle?satelliteName = {?}
/// </summary>
/// <param name="satelliteName"></param>
/// <returns></returns>
[HttpGet]
public async Task<Tle> GetTleBySatelliteName([FromQuery] string satelliteName)
{
return await _remoteTleProvider.GetTleAsync(satelliteName);
}
/// <summary>
/// [HttpGet] api/tle
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<IEnumerable<Tle>> GetAll()
{
Dictionary<int, Tle> tles = await _remoteTleProvider.GetTlesAsync();
return tles.Values;
}
/// <summary>
/// Метод получения последнего времени обновления TLE файла
/// </summary>
/// <remarks>
/// TLE файл обнавляется раз в час.
/// </remarks>
/// <returns>Время последнего обновления TLE файла</returns>
[HttpGet]
[Route("last_update")]
public object GetLastUpdateTleTime()
{
return new { lastUpdate = _remoteTleProvider.LastRefresh };
}
}
Раньше, для того чтобы в одном контролере было несколько get точек, необходимо было сконфигурировать роуты:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
И это работало.
Как в net 6 сконфигурировать роуты.
Если же это больше не возможно, то есть ли решение не используя костыли типа:
[HttpGet]
public async Task<IEnumerable<Tle>> GetTle([FromQuery] int? satelliteId, [FromQuery] string? satelliteName)
{
if (!string.IsNullOrEmpty(satelliteName) && !string.IsNullOrWhiteSpace(satelliteName))
{
return new[] { await _remoteTleProvider.GetTleAsync(satelliteName) };
}
if (satelliteId.HasValue)
{
return new[] { await _remoteTleProvider.GetTleAsync(satelliteId.Value) };
}
Dictionary<int, Tle> tles = await _remoteTleProvider.GetTlesAsync();
return tles.Values;
}