Служба REST WCF - Самостоятельная служба Windows - Как использовать% в URL

У меня есть служба REST WCF, которая имеет метод, который получает параметр в виде строки

Когда я использую%23 в URL, я получаю сообщение об ошибке: Конечная точка не найдена! например:

-- Id #9999
http://localhost:8000/MyService/GetData/Id/%239999 (%23 means # symbol encoded)

Если я использую без символа%, он работает нормально

http://localhost:8000/MyService/GetData/Id/10

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetData/id/{id}")]
    string GetData(string value);

}

Я размещаю Службу в Службе Windows:

        ServiceHost host = new ServiceHost(typeof(Service1), "http://localhost:8000");

        WebHttpBinding binding = new WebHttpBinding();

        ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IService1), binding, "MyService");
        WebHttpBehavior httpBehavior = new WebHttpBehavior();         
        endpoint.Behaviors.Add(httpBehavior);

        host.Open();

Я нашел этот пост: http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx но он не работает, так как я не размещаю WCF в IIS, вместо этого я размещаю его на Windows Service

2 ответа

Решение

Я нашел решение благодаря этой теме:
Как передать слэш и другие "чувствительные к URL" символы службе REST WCF?

Решение:

<configuration>
  <system.net>
    <settings>
      <httpListener unescapeRequestUrl="false"/>
    </settings>
  </system.net>
</configuration>

Не лучше использовать некоторые специальные символы в URL. пожалуйста, так что не используйте их.

взглянуть на MSDN - UriTemplate

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