Служба 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