Ошибка маршрутизации ASP.NET Core

У меня есть такой маршрут, как http://localhost:63037/api/futuresMarginRuns/7/data, который работает, однако другой API контроллера с маршрутом http://localhost:63037/api/futuresMarginRuns/2018-07-11/data не работает, даже точка останова в API контроллера не срабатывает. Вот сигнатуры API

    [HttpGet]
    [Route("/api/futuresMarginRuns/{id}/data")]
    public async Task<IActionResult> GetFuturesMarginRunDataAsync(long id)
    {
        var data = await _repository.GetAllAsync(id).ConfigureAwait(false);
        return Ok(data);
    }

    [HttpGet]
    [Route("/api/futuresMarginRuns/{runDate}/data")]
    public async Task<IActionResult> GetFuturesMarginRunDataByDateAsync(DateTime runDate)
    {
        var data = await _repository.GetAllAsync(runDate).ConfigureAwait(false);
        return Ok(data);
    }

В первом случае я получаю данные json, но во втором точка останова не срабатывает, поэтому похоже, что маршрут неправильно сопоставлен с API, и в этом случае я ожидаю ошибки, но я получаю пустой []

Как я могу работать с API?

Спасибо


person Anand    schedule 11.07.2018    source источник


Ответы (1)


Вам нужно добавить несколько ограничения маршрута к вашим маршрутам. Ограничения маршрута сообщают механизму маршрутизации, что если id должен быть целым числом, сопоставлять этот маршрут можно только в том случае, если текст в этом месте может быть преобразован в целое число (аналогично с датами и т. д.).

Поэтому я бы изменил ваши маршруты на следующие:

[HttpGet]
[Route("/api/futuresMarginRuns/{id:long}/data")]
public async Task<IActionResult> GetFuturesMarginRunDataAsync(long id)

[HttpGet]
[Route("/api/futuresMarginRuns/{runDate:datetime}/data")]
public async Task<IActionResult> GetFuturesMarginRunDataByDateAsync(DateTime runDate)
person Becuzz    schedule 11.07.2018