Маршрутизация необязательных параметров с помощью Http.RouteAttribute - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть действие с двумя обязательными и несколькими необязательными параметрами:

[HttpGet]
public IHttpActionResult GetUsers(DateTime dateFrom, DateTime dateTo, string zipcode, int? countryId)
{
    using (DataHandler handler = new DataHandler())
        return Ok(handler.GetUsers(dateFrom, dateTo).ToList());
}

Мне нужен такой URL:

/api/getusers/2018-12-03T07:30/2018-12-03T12:45?zipcode=4002&countryId=4

zipcode и countryIdнеобязательно и будет добавлено с ? -thingy.Обязательные параметры dateFrom и dateTo будут добавлены с /

, поэтому следующие URL-адреса также могут быть возможны:

/api/getusers/2018-12-03T07:30/2018-12-03T12:45?countryId=4
/api/getusers/2018-12-03T07:30/2018-12-03T12:45?zipcode=4002
/api/getusers/2018-12-03T07:30/2018-12-03T12:45

Я пробовал несколько маршрутов, таких как

[Route("getusers/{dateFrom}/{dateTo}")]
[Route("getusers/{dateFrom}/{dateTo}*")]
[Route("getusers/{dateFrom}/{dateTo}**")]
[Route("getusers/{dateFrom}/{dateTo}?zipcode={zipcode}&countryId={countryId}")]

но ни один из них не работает.Когда я удаляю необязательные параметры, это работает, но мне нужны эти необязательные параметры.

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 03 декабря 2018

Сделать необязательные параметры необязательными в методе действия

Если параметр маршрута является необязательным, необходимо определить значение по умолчанию для параметра метода.

//GET /api/getusers/2018-12-03T07:30/2018-12-03T12:45?countryId=4
//GET /api/getusers/2018-12-03T07:30/2018-12-03T12:45?zipcode=4002
//GET /api/getusers/2018-12-03T07:30/2018-12-03T12:45
[HttpGet]
[Route("getusers/{dateFrom:datetime}/{dateTo:datetime}")]
public IHttpActionResult GetUsers(DateTime dateFrom, DateTime dateTo, string zipcode = null, int? countryId = null) {
    using (DataHandler handler = new DataHandler())
        return Ok(handler.GetUsers(dateFrom, dateTo).ToList());
}

Ссылка Маршрутизация атрибутов в ASP.NET Web API 2

...