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、およびエスケープを含みます。問題は、クライアント側でエンコードされたデータがサーバーで適切に処理されていないことです。つまり、クエリ文字列をエンコード/エスケープすると、次のような HTTP GET リクエストになるということです。

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

%2527 はエスケープ文字です。サーバーは、都市名が実際には「MyCity%2527」であることを処理します。

サーバー自体で何かを行う必要がありますか? または、クエリ文字列のデコードを .NET で処理する必要がありますか? エンコードを正しく行っていますか?

ありがとうございました、

4

3 に答える 3

0

データ行を次のように変更します。

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

あなたはそれをqouteする必要はありません...

または、JSONのように送信したい場合は、

data: JSON.stringify({ stateAbbrev: escape(self.selectedState()), city: escape(self.city()) , name:escape(self.name()) }),
于 2012-11-21T06:42:00.357 に答える
0

残念ながら、これを回避できる唯一の方法は、'GET' の代わりに HTTP 'POST' を使用することでした。POST はサーバーに送信されるデータを自動的にエンコードするからです。

于 2012-11-27T21:24:03.570 に答える