De UserInfo van een proxy-URL is niet WebProxy.Credentials
Extraheer en decodeer gebruikersinformatie uit een HTTP-proxy-URI voordat je de NetworkCredential aanmaakt.
De URI-constructor van WebProxy kiest een eindpunt; hij vult Credentials niet met de gebruikersinformatie van die URI. Voor een door de toepassing gevalideerde HTTP-proxy-URL:
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 is de opgegeven proxy-URL, niet de website-URL. Uri parseert de authority, terwijl UriBuilder de gebruikersinformatie uit het in WebProxy opgeslagen eindpunt verwijdert.
Splits bij de eerste letterlijke dubbele punt voordat de componenten worden gedecodeerd. Dat behoudt een gecodeerde dubbele punt in de gebruikersnaam en houdt extra wachtwoord-dubbele punten in het wachtwoord. Decodeer elke component één keer; codeer het wachtwoord niet in Base64 als vervanging van URL-escaping.
Wijs proxy ten slotte toe aan de bedoelde HTTP-handler voordat die handler verzoeken start. Alleen het object aanmaken verandert het routeringsbeleid van een andere client niet.