UserInfo pada URL proxy bukanlah WebProxy.Credentials
Ekstrak dan dekode informasi pengguna dari URI proxy HTTP sebelum membuat NetworkCredential.
Konstruktor URI WebProxy hanya memilih endpoint; ia tidak mengisi Credentials dari informasi pengguna URI tersebut. Untuk URL proxy HTTP yang divalidasi aplikasi:
var uri = new Uri(proxyUrl);
var endpoint = new UriBuilder(uri)
{
UserName = "",
Password = ""
};
var proxy = new System.Net.WebProxy(endpoint.Uri);
if (uri.UserInfo.Length > 0)
{
var parts = uri.UserInfo.Split(new[] { ':' }, 2);
var username = Uri.UnescapeDataString(parts[0]);
var password = parts.Length == 2
? Uri.UnescapeDataString(parts[1])
: "";
proxy.Credentials =
new System.Net.NetworkCredential(username, password);
}
proxyUrl adalah URL proxy yang diberikan, bukan URL situs web. Uri mengurai authority-nya, sedangkan UriBuilder menghapus informasi pengguna dari endpoint yang disimpan di WebProxy.
Pisahkan pada titik dua literal pertama sebelum mendekode komponen. Ini mempertahankan titik dua yang terkode di dalam nama pengguna dan menyimpan titik dua tambahan kata sandi di dalam kata sandi. Dekode setiap komponen satu kali; jangan mengodekan kata sandi dengan Base64 sebagai pengganti escaping URL.
Terakhir, tetapkan proxy ke handler HTTP yang dimaksud sebelum handler tersebut memulai permintaan. Membangun objek saja tidak mengubah kebijakan perutean klien lain.