Следующий код работает на меня:
var webProxy = WebProxy.GetDefaultProxy();
webProxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = webProxy;
К сожалению, WebProxy.GetDefaultProxy()
удерживается от использования. Что еще я должен делать?
(использующий app.config для установки defaultProxy настройки не позволяется в моем развертывании),
От.NET 2.0 Вы не должны должны быть делать это. Если Вы явно не устанавливаете свойство Proxy на веб-запросе, оно использует значение статического WebRequest. DefaultWebProxy. Если Вы хотели изменить прокси, используемый всем последующим WebRequests, можно установить это статическое свойство 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. Прокси. Звоните
webRequest.Proxy.GetProxy(new Uri("http://google.com.au"))
для наблюдения фактических деталей прокси-сервера, который использовался бы.
, кажется, существуют некоторые дебаты о том, можно ли установить webRequest.Proxy
или WebRequest.DefaultWebProxy = null
для предотвращения использования прокси. Это, кажется, работает хорошо на меня, но Вы могли установить его на new DefaultProxy()
без параметров для получения необходимого поведения. Другая вещь проверить состоит в том, что, если элемент прокси существует в Вашем файле конфигурации приложений, Платформа.NET будет НЕ , используют настройки прокси в Internet Explorer.
статья MSDN Magazine Берет Нагрузку От Пользователей с Автоматической Конфигурацией в.NET , предоставляет более подробную информацию того, что происходит под капотом.
Для тех, кто, в отличие от Brian Genisio, способен установить содержание файла конфигурации их приложения:-ничего не делают в коде. Вместо этого добавьте это к своему app.config / web.config.
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>
Действительно и действительно значение по умолчанию для использования учетных данных по умолчанию должно быть "верным"; я видел, что эта проблема смущает столько людей - разработчики, пользователи, парни IT.
Для большего количества информации посмотрите здесь ОБНОВЛЕНИЕ:-http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx
: я создал эту проблему/идею для Microsoft для изменения значения по умолчанию useDefaultCredentials от лжи до истинного так, чтобы эта целая проблема ушла, и приложения.NET "просто работают"; проголосуйте за него, если Вы соглашаетесь:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
Это вынудит DefaultWebProxy
использовать учетные данные по умолчанию, подобный эффект, как сделано до UseDefaultCredentials = true
.
Следовательно весь недавно создал WebRequest
, экземпляры будут использовать прокси по умолчанию, который был настроен для использования учетных данных прокси по умолчанию.
Можно использовать Отражение для установки UseDefaultCredentials
- Свойство от Кода до "истинного"
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;
Этот поток стар, но я просто недавно споткнулся проблему defaultProxy, и возможно это помогает другим.
я использовал конфигурацию, устанавливающую в качестве предложенного Andrew. При развертывании его мой клиент получил ошибку при высказывании, не было достаточных прав установить конфигурацию 'defaultProxy'.
Не знание, почему я не имею права установить эту конфигурацию и что делать с этим, я просто удалил его, и это все еще работало. Таким образом, кажется, что в VS2013 эта проблема устраняется.
И в то время как мы в нем:
WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword");
использование прокси по умолчанию с Вашими учетными данными. Если Вы хотите вызвать не использование прокси, просто устанавливает DefaultWebProxy в NULL (хотя я не знаю, хотите ли Вы это).
Походит в некотором более новом Приложении, Конфигурация отличается, как я видел по этому Вопросу , Как пройти проверку подлинности против прокси при использовании класса HttpClient?
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="True" />
</defaultProxy>
</system.net>
Также зарегистрированный на https://msdn.microsoft.com/en-us/library/dkwyc043.aspx
В моем развертывании я не могу использовать app.config ни один для встраивания что предложенный Andrew Webb.
, Таким образом, я делаю это:
IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
WebClient wc = new WebClient();
wc.UseDefaultCredentials = true;
wc.Proxy = proxy;
На всякий случай Вы хотите проверить мои настройки IE:
Это - новый предложенный метод.
WebRequest.GetSystemWebProxy();
Потребность в некотором системном наборе, аннулируют Прокси proprerty:
Сеть. WebRequest. DefaultWebProxy. Учетные данные = Система. Сеть. CredentialCache. DefaultCredentials Тусклый запрос Как WebRequest = WebRequest. Создайте (sRemoteFileURL) запрос. Прокси = Ничто
Это - ошибка.