Как обрабатывать параметр с пробелом и косой чертой в URI C# WEB API 2

У меня есть контроллер с именем Test Controller, а метод называется Test. Метод Test принимает один параметр. Но когда параметр содержит значение, имеющее косую черту, веб-интерфейс выдаёт ошибку. Я использую WEB API 2.

[Route("Test/{companyName}")]
[AcceptVerbs("GET", "POST")]
[System.Web.HHttpGet]

public HttpResponseMessage Test(string companyName)
{
}

значение параметра - BTL / Force Motor Ltd.

Я пытался, но ничего не произошло.

<uri>
  <schemeSettings>
    <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
  </schemeSettings>
</uri>

2 ответа

Вам нужно URL Кодировать значения, которые вы отправляете в свой API, например так:

http://yourapidomainname/api/yourControllerName/?companyName=BTL%20%2F%20Force%20Motor%20Ltd

[ПРОБЕЛ], когда URL кодируется beomes:% 20

[Прямая косая черта], когда закодированный URL становится: %2F

вам не нужно http декодировать значения в вашем контроллере, так как эти значения будут декодированы платформой, как только они достигнут вашего контроллера. Таким образом, вы увидите "BTL% 20% 2F% 20Force% 20Motor% 20Ltd" как "BTL / Force Motor Ltd" внутри вашего контроллера.

полный список кодировок URL см. по адресу: http://www.w3schools.com/tags/ref_urlencode.asp

Ваша проблема не имеет ничего общего с самим WebAPI, а с тем, как ASP.Net обрабатывает некоторые конкретные URL-адреса. Это также может повлиять на любые точки ("."), Которые передаются в ваш API. Вот что сработало для меня:

Добавьте эту строку в ваш web.config под system.web

<httpRuntime relaxedUrlToFileSystemMapping="true" />

У Фила Хаакеда есть отличная статья, в которой более подробно.

Другие вопросы по тегам