web-dev-qa-db-ja.com

URLのエンコードパラメーター

URLを作成しているSilverlightアプリケーションがあります。このURLは、RESTベースのサービスへの呼び出しです。このサービスでは、場所を表す単一のパラメーターが必要です。場所は「都市、州」の形式です。このURLを作成するには、次のコードを呼び出します。

string url = "http://www.domain.com/myService.svc/";
url += HttpUtility.UrlEncode(locationTextBox.Text);

ユーザーが「シカゴ、イル」をlocationTextBoxに入力すると、結果は次のようになります。

http://www.domain.com/myService.svc/chicago%2c+il

しかし実際には、URLが次のように見えることを期待していました。

http://www.domain.com/myService.svc/chicago,%20il

ブラウザのURLを介してサービスをテストするとき、期待したものが機能します。ただし、生成されているURLは機能していません。私は何を間違えていますか?

41
user70192

HttpUtility 関数を使用する代わりに、 ri . EscapeDataString をお勧めします。 Server.UrlEncode vs. HttpUtility.UrlEncode の説明を参照してください。

69
Alexei Levenkov

UrlPathEncode()メソッドを使用してみてください。次の場所にあるコメントを参照してください: http://msdn.Microsoft.com/en-us/library/h10z5byc.aspx

見積もり:

UrlEncode()メソッドまたはUrlPathEncode()メソッドを使用してURLをエンコードできます。ただし、メソッドは異なる結果を返します。 UrlEncode()メソッドは、各スペース文字をプラス文字(+)に変換します。 UrlPathEncode()メソッドは、各スペース文字を16進表記のスペースを表す文字列「%20」に変換します。デコードを実行するプラットフォームまたはブラウザーに関係なく、一貫したデコードされたURLを保証するために、URLのパス部分をエンコードする場合は、UrlPathEncode()メソッドを使用します。

6
JochemKempe

最も安全な方法は、AntiXssライブラリを使用することです。コンテンツをさまざまな目的(Urlエンコード、HtmlおよびHtmlAttributeエンコードなど)にエンコードするための、より標準的な(および安全な)バージョンがあります。 MSサイトからダウンロードできる古い3.1バージョンがあります( http://www.Microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09 )古い.NETバージョンと http://wpl.codeplex.com/ の新しいバージョンで動作します

0
Ken Egozi