Как обрабатывать параметр с пробелом и косой чертой в 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" />
У Фила Хаакеда есть отличная статья, в которой более подробно.