Использование библиотеки system.serviceModel для маршрутизации, у меня есть службы REST с помощью простого шаблона, который выглядит какВозможно ли иметь параметр REST url с амперсандом?
«{SEARCHTERM}? Выбрать = {} someSearchOpt
Поэтому вызов будет выглядеть как:
искать Ф.О. r фраза «речные экспедиции» без вариантов.
Это просто принимает поисковую фразу и возвращает результаты. Он работает отлично. Однако, если поиск по фразе, которая содержит буквальный амперсанд, например, как «Льюис & Кларк», я попытался очевидный ВГД, кодирующего амперсанд
Льюис% 26Clark
но даже запрос никогда не маршрутизируется, но сервер немедленно возвращает 400 Bad Request. Понятно, что он интерпретируется как разделитель строки запроса и делает запрос недействительным, поскольку этот конкретный шаблон ожидает параметра url и не имеет предшествующего '?' разделитель.
Поскольку эти поисковые фразы могут иметь другие ограниченные символы, ожидается, что они будут закодированы клиентом, а при их успешной маршрутизации REST api вызывает HttpUtility.UrlDecode в параметре. Итак, мой вопрос в том, действительно ли есть какой-то метод получения URL-адреса, кодированного url, правильно маршрутизируемого как параметр url для отдыха, а не интерпретируемый и не интерпретируемый как разделитель строки запроса?
Обновление: для записи, если поисковый запрос ожидался как параметр строки запроса (не параметр url), отправка Lewis% 26Clark работает нормально. Например
http://myhost.contoso.com/searchapi?searchTerm=lewis%26clark
Так уточнить, я ищу, чтобы получить тот же результат при использовании параметра URL-адреса в шаблоне REST.
+1. Подождите, пока вам не понадобится кодировать косые черты ... Sysmem.Uri «полезно» отменяет их все, не задаваясь в качестве функции безопасности. – Cameron
В вашем примере нет строки запроса ... Не уверен, что я что-то пропустил ... –
@alexei ... точно точка ... это REST api, поэтому термин поиска является параметром url , а не параметр строки запроса ... более распространенным примером является «http: // myhost.contoso.com/restapi/customer/3», где «3» является параметром url. В моем примере параметр запроса «opt» необязателен и может быть опущен. – mdisibio