Подтвердить что ты не робот

Как определить (элегантно), если требуется проверка подлинности прокси в приложении winforms С#

Мой вариант использования - это, я хочу обратиться в веб-службу, и если я за прокси-сервером, который требует проверки подлинности, я хочу просто использовать учетные данные по умолчанию...

  WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;

В противном случае я просто просто позвоню. Было бы очень приятно определить, требуется ли auth перед фронтом, а не обрабатывать исключение после попытки сделать вызов.

Идеи?

4b9b3361

Ответ 1

System.Net.WebProxy имеет свойство UseDefaultCredentials, которое может быть тем, что вы хотите (но я должен признать немного невежества здесь). Ссылка на соответствующую документацию здесь.

Ответ 2

Только после того, как я впервые развернул приложение , я понял, что некоторые пользователи находятся за брандмауэрами... чтобы работать, чтобы проверить его, Вместо того, чтобы выполнять проверку подлинности "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 {} без прокси-сервера сначала, а не только с использованием выше), но теперь этот код работает для меня как на работе (аутентификация прокси), так и на дома (нет).

Ответ 3

На самом деле, кажется, что это не проблема в конце концов, Раньше я настраивал auth так...

  WebProxy proxy = new WebProxy(@"http://<myProxyAddress>:8080");
  proxy.Credentials = new NetworkCredential(<myUSerName>, <myPassword>, <myDomain>);
  WebRequest.DefaultWebProxy = proxy;

Это было бы хорошо, если бы я был за прокси-сервером, но выставлял ошибку, когда не было прокси-сервера, поэтому, конечно, я ожидал такой же ошибки выше, поскольку я все еще просто устанавливал одни и те же учетные данные, но вы знаете, что они говорят о предполагая вещи.... на самом деле нет никакой ошибки при настройке по умолчанию creds, все сладко.

Ответ 4

Если вы хотите проверить настройки прокси-сервера в IE, вы также можете заглянуть в реестр: проверьте ветвь HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings дерева реестра - множество параметров и настроек. В первую очередь: ProxyEnable (a DWORD, 0 = без прокси, 1 = прокси-сервер).

Ответ 5

Я настоятельно рекомендую вам попробовать этот ответ по аналогичному вопросу (а не: не принятый ответ). Никаких изменений кода, просто строка в вашем файле app.config.