Ответ 1
System.Net.WebProxy
имеет свойство UseDefaultCredentials
, которое может быть тем, что вы хотите (но я должен признать немного невежества здесь). Ссылка на соответствующую документацию здесь.
Мой вариант использования - это, я хочу обратиться в веб-службу, и если я за прокси-сервером, который требует проверки подлинности, я хочу просто использовать учетные данные по умолчанию...
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;
В противном случае я просто просто позвоню. Было бы очень приятно определить, требуется ли auth перед фронтом, а не обрабатывать исключение после попытки сделать вызов.
Идеи?
System.Net.WebProxy
имеет свойство UseDefaultCredentials
, которое может быть тем, что вы хотите (но я должен признать немного невежества здесь). Ссылка на соответствующую документацию здесь.
Только после того, как я впервые развернул приложение , я понял, что некоторые пользователи находятся за брандмауэрами... чтобы работать, чтобы проверить его, Вместо того, чтобы выполнять проверку подлинности "407", я просто делаю ту же настройку Proxy
, может ли она понадобиться, или нет...
System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri.AbsoluteUri);
//HACK: add proxy
IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
req.Proxy = proxy;
req.PreAuthenticate = true;
//HACK: end add proxy
req.AllowAutoRedirect = true;
req.MaximumAutomaticRedirections = 3;
req.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; DeepZoomPublisher.com)";
req.KeepAlive = true;
req.Timeout = 3 * 1000; // 3 seconds
Я не уверен, каковы относительные преимущества/недостатки (try {} catch {} без прокси-сервера сначала, а не только с использованием выше), но теперь этот код работает для меня как на работе (аутентификация прокси), так и на дома (нет).
На самом деле, кажется, что это не проблема в конце концов, Раньше я настраивал auth так...
WebProxy proxy = new WebProxy(@"http://<myProxyAddress>:8080");
proxy.Credentials = new NetworkCredential(<myUSerName>, <myPassword>, <myDomain>);
WebRequest.DefaultWebProxy = proxy;
Это было бы хорошо, если бы я был за прокси-сервером, но выставлял ошибку, когда не было прокси-сервера, поэтому, конечно, я ожидал такой же ошибки выше, поскольку я все еще просто устанавливал одни и те же учетные данные, но вы знаете, что они говорят о предполагая вещи.... на самом деле нет никакой ошибки при настройке по умолчанию creds, все сладко.
Если вы хотите проверить настройки прокси-сервера в IE, вы также можете заглянуть в реестр: проверьте ветвь HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
дерева реестра - множество параметров и настроек. В первую очередь: ProxyEnable
(a DWORD, 0 = без прокси, 1 = прокси-сервер).
Я настоятельно рекомендую вам попробовать этот ответ по аналогичному вопросу (а не: не принятый ответ). Никаких изменений кода, просто строка в вашем файле app.config.
Похоже, что если вы оставите только прокси-сервер, .NET должен просто использовать настройки прокси-сервера IE, который кажется наиболее "правильный" способ общения с прокси-серверами...