Хотя принятый ответ будет работать в некоторых случаях, когда параметр URI находится в конце URI, он не будет работать, если параметр URI находится в середине URI. Но с помощью нескольких параметров конфигурации вы можете разрешить приложению принимать закодированные прямые косые черты.
HttpListener
, который принимает входящие запросы, использует внутренний HttpListenerRequestUriBuilder
для анализа необработанного URI запроса.
HttpListenerRequestUriBuilder
будет или не будет удалять кодировку, основанную на настройке. Добавьте следующий параметр в ваш файл app.config
:
<configuration>
<system.net>
<settings>
<httpListener unescapeRequestUrl="false"/>
</settings>
</system.net>
</configuration>
Это позволит правильно формировать входящие Message
заголовки To
без удаления URI.
Если вы используете версию .NET до 4.5, я полагаю, вам также может понадобиться добавить еще один параметр, указывающий классу System.Uri
, чтобы он не экранировал косые черты для путей http
и https
. Этот параметр выглядит следующим образом:
<configuration>
<uri>
<schemeSettings>
<add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
<add name="https" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
</schemeSettings>
</uri>
</configuration>
Uri.Match
и значение по умолчанию QueryStringConverter
должно по-прежнему работать с неэкранированным текстом, поэтому такой метод, как:
[WebGet(UriTemplate = "foos/{bar}/baz"]
public Baz GetFooBaz(string bar)
{
// ...
}
предоставит неэкранированную строку для параметра bar
.