Как настроить прокси-сервер по умолчанию для использования учетных данных по умолчанию? - PullRequest
62 голосов
/ 18 ноября 2008

У меня работает следующий код:

var webProxy = WebProxy.GetDefaultProxy();
webProxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = webProxy;

К сожалению, WebProxy.GetDefaultProxy() устарело. Что еще я должен делать?

(использование app.config для установки параметров defaultProxy запрещено в моем развертывании)

Ответы [ 9 ]

99 голосов
/ 18 ноября 2011

Для тех, кто, в отличие от Брайана Дженисио, может установить содержимое файла конфигурации своего приложения: - ничего не делать в коде. Вместо этого добавьте это в ваш app.config / web.config.

<system.net>
  <defaultProxy useDefaultCredentials="true" />
</system.net>

Действительно и по умолчанию для использования учетных данных по умолчанию должно быть "true"; Я видел, как эта проблема сбивает с толку многих людей - разработчиков, пользователей, ИТ-специалистов.

Подробнее см. Здесь: - http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx

ОБНОВЛЕНИЕ: я создал эту проблему / идею для Microsoft, чтобы изменить значение по умолчанию для useDefaultCredentials с false на true, чтобы вся эта проблема исчезла и приложения .NET «просто работали»; пожалуйста, проголосуйте, если вы согласны:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth

57 голосов
/ 19 ноября 2008

Начиная с .NET 2.0 вам не нужно этого делать. Если вы явно не задаете свойство Proxy в веб-запросе, оно использует значение статического WebRequest.DefaultWebProxy. Если вы хотите изменить прокси, используемый во всех последующих веб-запросах, вы можете установить это статическое свойство DefaultWebProxy.

Поведение WebRequest.DefaultWebProxy по умолчанию заключается в использовании тех же базовых настроек, что и в Internet Explorer.

Если вы хотите использовать различные настройки прокси для текущего пользователя, тогда вам нужно будет набрать

WebRequest webRequest = WebRequest.Create("http://stackoverflow.com/");
webRequest.Proxy = new WebProxy("http://proxyserver:80/",true);

или

WebRequest.DefaultWebProxy = new WebProxy("http://proxyserver:80/",true);

Следует также помнить, что объектная модель для прокси-серверов включает концепцию, согласно которой прокси-сервер может различаться в зависимости от имени хоста назначения. Это может немного смущать при отладке и проверке свойства webRequest.Proxy. Звоните

webRequest.Proxy.GetProxy(new Uri("http://google.com.au")) для просмотра фактических данных прокси-сервера, который будет использоваться.

Похоже, идут споры о том, можете ли вы установить webRequest.Proxy или WebRequest.DefaultWebProxy = null, чтобы предотвратить использование какого-либо прокси. Кажется, это работает нормально для меня, но вы могли бы установить его на new DefaultProxy() без параметров, чтобы получить требуемое поведение. Еще одна вещь, которую нужно проверить, - это то, что если в файле конфигурации вашего приложения существует прокси-элемент , .NET Framework будет НЕ использовать настройки прокси в Internet Explorer.

В статье MSDN Magazine Снять нагрузку с пользователей с автоматической настройкой в ​​.NET дается более подробная информация о том, что происходит под капотом.

15 голосов
/ 30 сентября 2013
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

Это заставит DefaultWebProxy использовать учетные данные по умолчанию, аналогично эффекту, сделанному через UseDefaultCredentials = true.

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

4 голосов
/ 11 июля 2012

Вы можете использовать Reflection, чтобы установить UseDefaultCredentials -Property из кода на «true»

System.Reflection.PropertyInfo pInfo = System.Net.WebRequest.DefaultWebProxy.GetType().GetProperty("WebProxy", 
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

((System.Net.WebProxy)pInfo.GetValue(System.Net.WebRequest.DefaultWebProxy, null)).UseDefaultCredentials = true;
2 голосов
/ 25 января 2017

Похоже, что в некоторых более новых приложениях конфигурация отличается, как я видел в этом вопросе Как пройти аутентификацию на прокси-сервере при использовании класса HttpClient?

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
         <proxy usesystemdefault="True" />
    </defaultProxy>
</system.net>

Также задокументировано https://msdn.microsoft.com/en-us/library/dkwyc043.aspx

2 голосов
/ 11 декабря 2013

Эта ветка старая, но я недавно наткнулся на проблему defaultProxy, и, возможно, она поможет другим.

Я использовал настройку конфигурации, как предложил Эндрю. При его развертывании мой клиент получил сообщение о том, что у него недостаточно прав для настройки конфигурации defaultProxy.

Не зная, почему я не имею права устанавливать эту конфигурацию и что с этим делать, я просто удалил ее, и она все еще работала. Похоже, что в VS2013 эта проблема исправлена.

И пока мы на этом:

    WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword");

использует прокси по умолчанию с вашими учетными данными. Если вы хотите принудительно не использовать прокси, просто установите для DefaultWebProxy значение null (хотя я не знаю, хочет ли он этого).

1 голос
/ 17 апреля 2013

В своем развертывании я не могу ни использовать app.config, чтобы внедрить то, что предложил Эндрю Уэбб.
Итак, я делаю это:

    IWebProxy proxy = WebRequest.GetSystemWebProxy();
    proxy.Credentials = CredentialCache.DefaultCredentials;

    WebClient wc = new WebClient();
    wc.UseDefaultCredentials = true;
    wc.Proxy = proxy;

На всякий случай, если вы хотите проверить мои настройки IE:

enter image description here

0 голосов
/ 11 ноября 2014

Требуется ли в некоторых системах установить нулевое значение Proxy:

Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials Dim request As WebRequest = WebRequest.Create (sRemoteFileURL) request.Proxy = Nothing

Это ошибка.

0 голосов
/ 18 января 2011

Это новый предложенный метод.

WebRequest.GetSystemWebProxy();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...