0

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

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
public string Find(string stateAbbrev, string city, string name) 
{
   // Code
}

我从此调用此 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/data 参数的几种变体。包括encodeURI、encodeURIComponent和escape。问题是在客户端编码的数据没有在服务器上正确处理。我的意思是,当我对查询字符串进行编码/转义时,我最终会收到这样的 HTTP GET 请求:

http://localhost/webservice.asmx/Find?stateAbbrev=''&city='MyCity%2527'&name=''

%2527 是一个转义字符。服务器处理这个城市名称实际上是“MyCity%2527”。

我是否需要在服务器本身上做任何事情,或者查询字符串的解码是否应该由 .NET 处理?我是否正确进行编码?

谢谢你,

4

3 回答 3

0

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

于 2012-11-21T06:37:49.553 回答
0

将数据行更改为:

            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()) }),
于 2012-11-21T06:42:00.357 回答
0

不幸的是,我能解决这个问题的唯一方法是使用 HTTP 'POST' 而不是 'GET',因为 POST 会自动对发送到服务器的数据进行编码。

于 2012-11-27T21:24:03.570 回答