ポータブル クラス ライブラリでは、Web 要求の作成が十分にサポートされていることを理解しています。PCL に HttpUtility.UrlEncode に相当するものはありますか? Windows Phone および Metro アプリケーションに必要です。
2 に答える
使用Uri.EscapeUriString
してUri.EscapeDataString
2つの違いは、EscapeDataString
これらの文字を含むRFC2396予約文字もエンコードすることだけです;/?:@&=+$
。
これらのメソッドはどちらもRFC2396の予約されていない文字をエンコードしないことに注意することが重要-_.!~*'()
です。したがって、これらをエンコードする必要がある場合は、手動でエンコードする必要があります。
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());
}
(これは単純なものですが、常に自己責任で正規表現してください。)