Вы можете попробовать это для кодирования
public static string UrlEncode(string s)
{
return typeof(System.Net.WebClient).InvokeMember("UrlEncode", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, new[] { "[#encoded] <data>" }) as string;
}
// by @DmitryDzygin
public static string UrlDecode(string s)
{
return typeof(System.Net.WebClient).Assembly.GetType("System.Net.HttpListenerRequest+Helpers").InvokeMember("UrlDecodeStringFromStringInternal", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, new object[] { s, Encoding.UTF8 }) as string;
}
И если вам неудобно, или ваше приложение не работает с полным уровнем доверия, попробуйте это
public class HttpUtils : System.Web.Util.HttpEncoder
{
private static HttpUtils _encoder;
internal static HttpUtils Encoder
{
get { return _encoder ?? (_encoder = new HttpUtils()); }
}
internal string InternalUrlEncode(string s)
{
var bytes = System.Text.Encoding.UTF8.GetBytes(s);
var encodedBytes = base.UrlEncode(bytes, 0, bytes.Length);
return System.Text.Encoding.UTF8.GetString(encodedBytes);
}
public static string UrlEncode(string s)
{
return Encoder.InternalUrlEncode(s);
}
}
Я знаю, что это не самый лучший способ, но что может быть лучшим, если мы не используем HttpUtility.UrlEncode! ..