将URL字符串从javascript传递到WCF服务

时间:2012-02-24 13:28:30

标签: javascript jquery .net wcf

我有一个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);
    }
}

2 个答案:

答案 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参数作为查询字符串参数
  • 传递
  • 通过.NET 4.0中提供的<schemeSettings>配置元素配置应如何解析URI

您可以首先将编码的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函数不会对/:字符进行编码。