Разрешить использование специальных символов в параметрах веб-API

Мне нужно иметь возможность обрабатывать специальные символы в вызове REST. В частности, символы . и /.

Например, у меня есть маршрут GET /api/division/{someDivision}. Теперь, вызывая этот маршрут с параметром /api/division/West Canada/, я получаю возврат, и все работает как положено. Однако мне нужно иметь возможность поддерживать другие бизнес-подразделения с такими названиями, как «Юго-запад США». и «Северная/Южная Америка». Передача этих параметров через мой маршрут возвращает 404 через API, поскольку я предполагаю, что обработчик http думает, что символы . и / заставляют его думать, что я имею в виду другой домен или каталог. Есть ли способ обойти это, чтобы я мог передать необходимый параметр?

Маршрут:

[HttpGet]
[Route("{division}/information")]
public IHttpActionResult DivisionInfo(string division)
{ 
  ...omitted for brevity



Ответы (2)


Вы можете попробовать настроить свой маршрут следующим образом:

[HttpGet]
[Route("/api/information")]
public IHttpActionResult DivisionInfo(string division)

Затем вы можете позвонить GET http://website.com/api/information?division=text.with/special./characters.

person matthughes404    schedule 24.02.2015
comment
Нет ли способа сделать это и сохранить вызов RESTful? - person KidBatman; 03.03.2015
comment
Нет ничего не RESTful в наличии параметра запроса для вашей строки поиска. В этой статье приводится пример маршрута, выполняющего именно это: vinaysahni.com/ - person matthughes404; 05.03.2015

попробуйте добавить [FromUri] перед параметром:

Route("api/Person/{ID}/[FromUri]{UserName}")]
person Max    schedule 06.10.2017