28

ポータブル クラス ライブラリでは、Web 要求の作成が十分にサポートされていることを理解しています。PCL に HttpUtility.UrlEncode に相当するものはありますか? Windows Phone および Metro アプリケーションに必要です。

4

2 に答える 2

36

使用Uri.EscapeUriStringしてUri.EscapeDataString

2つの違いは、EscapeDataStringこれらの文字を含むRFC2396予約文字もエンコードすることだけです;/?:@&=+$

これらのメソッドはどちらもRFC2396の予約されていない文字をエンコードしないことに注意することが重要-_.!~*'() です。したがって、これらをエンコードする必要がある場合は、手動でエンコードする必要があります。

于 2012-07-13T17:02:22.517 に答える
15

Webユーティリティ

幸運にも .NET 4.5 (Profile7 など) を対象とする移植可能なクラス ライブラリでは、多くの HttpUtility メソッドが .NET に兄弟を持っていSystem.Net.WebUtilityます。

using System.Net;

WebUtility.UrlEncode("some?string#");

潜在的な警告

兄弟メソッドのいくつかは対応する HttpUtility と同じように見えますが、これは結果として得られるエンコーディングにわずかな違いがあります。WebUtility.UrlEncode大文字のエンコーディングをHttpUtility.UrlEncode生成し、小文字のエンコーディングを生成します。

WebUtility.UrlEncode("?") // -> "%3F"
HttpUtility.UrlEncode("?") // -> "%3f"

後方互換性を持たせる

以前の HttpUtility コードで生成したものとまったく同じものを生成する PCL コードに依存している場合は、このメソッドの周りに独自のヘルパー メソッドを作成し、正規表現することができます。

using System.Text.RegularExpressions;

public static string UrlEncodeOldSchool(string value) {
    var encodedValue = WebUtility.UrlEncode(value);
    return Regex.Replace(encodedValue, "(%[0-9A-F]{2})",
                         encodedChar => encodedChar.Value.ToLowerInvariant());
}

(これは単純なものですが、常に自己責任で正規表現してください。)

于 2015-03-10T21:30:58.900 に答える