我有一个WCF服务,我想将URL字符串传递给。但是,只要遇到'%'
或'/'
字符,就会失败。
来自javascript的示例,这可行
$.post("http://localhost:15286/Service1.svc/Submit/thor");
但这些都没有:
$.post("http://localhost:15286/Service1.svc/Submit/http://www.google.com");
$.post("http://localhost:15286/Service1.svc/Submit/http:%");
我的服务中有一个断点,在最后两个例子中它甚至没有被击中。
我是WCF服务的新手,所以我可能只是犯了一个菜鸟错误。
WCF服务
[ServiceContract]
public interface IService1
{
[WebInvoke(UriTemplate = "/Submit/{imageURL}")]
[OperationContract]
string Submit(string imageURL);
}
public class Service1 : IService1
{
public string Submit(string imageURL)
{
return String.Format("Thanks, you sent me '{0}'.", imageURL);
}
}
答案 0 :(得分:4)
尝试使用encodeURIComponent JavaScript函数对网址的最后部分进行编码:
var parameter = encodeURIComponent("http://www.google.com")
var url = "http://localhost:15286/Service1.svc/Submit/" + parameter
$.post(url);
但是,由于 WCF无法正确解析某些URL编码字符,您可能仍会遇到相同的错误。这似乎是a bug in WCF,其中有几个已知的解决方法:
您可以首先将编码的URL作为查询字符串参数传递,然后查看它是否有效。这是一个例子:
[ServiceContract]
public interface IMyService
{
[WebInvoke(UriTemplate = "/Submit?url={imageURL}")]
[OperationContract]
string Submit(string imageURL);
}
并在客户端:
var parameter = encodeURIComponent("http://www.google.com")
var url = "http://localhost:15286/Service1.svc/Submit?url=" + parameter
$.post(url);
答案 1 :(得分:1)
使用encodeURIComponent功能正确编码参数,例如:
$.post("http://localhost:15286/Service1.svc/Submit/" +
encodeURIComponent("http://www.google.com"));
请注意,encodeURI函数不会对/
或:
字符进行编码。