次のような単純な .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 で処理する必要がありますか? エンコードを正しく行っていますか?
ありがとうございました、