WCF REST 服务 - 自托管 Windows 服务 - 如何在 URL 中使用 %
WCF REST Service - Self Host Windows Service - How to use % in URL
我有一个 REST WCF 服务,它有一个获取字符串参数的方法
当我在 Url 中使用 %23 时,我收到一条错误消息:找不到端点!
例如:
-- 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();
我找到了这个 post:
http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx 但它不起作用,因为我没有在 IIS 上托管 WCF 我将它托管在 Windows 服务上
感谢这个帖子,我找到了解决方案:
How can I pass slash and other 'url sensitive' characters to a WCF REST service?
解决方案:
<configuration>
<system.net>
<settings>
<httpListener unescapeRequestUrl="false"/>
</settings>
</system.net>
</configuration>
在 url 中使用一些特殊字符不是最佳做法。请考虑不要使用它们。
我有一个 REST WCF 服务,它有一个获取字符串参数的方法
当我在 Url 中使用 %23 时,我收到一条错误消息:找不到端点! 例如:
-- 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();
我找到了这个 post: http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx 但它不起作用,因为我没有在 IIS 上托管 WCF 我将它托管在 Windows 服务上
感谢这个帖子,我找到了解决方案:
How can I pass slash and other 'url sensitive' characters to a WCF REST service?
解决方案:
<configuration>
<system.net>
<settings>
<httpListener unescapeRequestUrl="false"/>
</settings>
</system.net>
</configuration>
在 url 中使用一些特殊字符不是最佳做法。请考虑不要使用它们。