从jQuery Ajax调用的.NET Web服务未处理编码的查询字符串

从jQuery Ajax调用的.NET Web服务未处理编码的查询字符串,jquery,.net,ajax,Jquery,.net,Ajax,我有一个简单的.NET[asmx]web服务设置,如下所示: [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] public string Find(string stateAbbrev, string city, string name) { // Code } http://localhost/webservice.asmx/Find?stateAbbrev=''&

我有一个简单的.NET[asmx]web服务设置,如下所示:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
public string Find(string stateAbbrev, string city, string name) 
{
   // Code
}
http://localhost/webservice.asmx/Find?stateAbbrev=''&city='MyCity%2527'&name=''
我通过以下方式调用此web方法:

           $.ajax({
                type: "get",
                contentType: "application/json; charset=utf-8",
                cache: false,
                url: "/webservice.asmx/Find",
                data: { stateAbbrev: "'" + escape(self.selectedState()) + "'", city: "'" + escape(self.city()) + "'", name: "'" + escape(self.name()) + "'" },
                dataType: "json",
                success: function() { }
              });
我尝试了以上url/数据参数的几种变体。包括encodeURI、encodeURIComponent和escape。问题是在客户端编码的数据在服务器上没有得到正确处理。我的意思是,当我对查询字符串进行编码/转义时,我最终得到一个HTTP GET请求,如下所示:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
public string Find(string stateAbbrev, string city, string name) 
{
   // Code
}
http://localhost/webservice.asmx/Find?stateAbbrev=''&city='MyCity%2527'&name=''
%2527是转义字符。服务器处理此问题时,城市名称实际上是“MyCity%2527”

我是否需要在服务器本身上执行任何操作,还是应该由.NET处理查询字符串的解码?我的编码正确吗


谢谢,

尝试声明一个变量以获取self.selectedState()的值,从中可以检查值上是否有多余的字符。然后将变量传递给ajax

将数据行更改为:

            data: { stateAbbrev: escape(self.selectedState()), city: escape(self.city()) , name:escape(self.name()) },
你不必把它弄坏

或者,如果您想像JSON一样发送它,您可以尝试使用

data: JSON.stringify({ stateAbbrev: escape(self.selectedState()), city: escape(self.city()) , name:escape(self.name()) }),

不幸的是,我能绕过这个问题的唯一方法是使用HTTP“POST”而不是“get”,因为POST会自动对发送到服务器的数据进行编码