63

次のコードは私にとってはうまくいきます:

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

残念ながら、WebProxy.GetDefaultProxy()非推奨です。他に何をすればいいですか?

(app.config を使用して defaultProxy 設定を設定することは、私の展開では許可されていません)

4

10 に答える 10

102

Brian Genisio とは異なりアプリケーションの構成ファイルの内容を設定できる人は、コードで何もしないでください。代わりに、これを app.config / web.config に追加してください。

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

デフォルトの資格情報を使用するためのデフォルトは、本当に「true」にする必要があります。私は、この問題が非常に多くの人々 (開発者、ユーザー、IT 担当者) を混乱させているのを見てきました。

詳細については、こちらを参照してください:- 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-認証

于 2011-11-18T10:20:20.040 に答える
57

.NET 2.0以降、これを行う必要はありません。WebリクエストでProxyプロパティを明示的に設定しない場合、静的WebRequest.DefaultWebProxyの値が使用されます。後続のすべてのWebRequestで使用されているプロキシを変更する場合は、この静的DefaultWebProxyプロパティを設定できます。

WebRequest.DefaultWebProxyのデフォルトの動作は、InternetExplorerで使用されるものと同じ基本設定を使用することです。

現在のユーザーとは異なるプロキシ設定を使用する場合は、コーディングする必要があります

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()が、必要な動作を取得するためにパラメーターなしで設定することができます。確認すべきもう1つの点は、アプリケーション構成ファイルにプロキシ要素が存在する場合、.NETFrameworkはInternetExplorerのプロキシ設定を使用しないことです。

MSDN Magazineの記事「.NETの自動構成でユーザーの負担を軽減する」では、内部で何が起こっているかについて詳しく説明しています。

于 2008-11-19T01:10:10.133 に答える
5

リフレクションを使用してUseDefaultCredentials、コードのプロパティを「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;
于 2012-07-11T09:44:44.127 に答える
2

このスレッドは古いですが、最近、defaultProxy の問題に遭遇したばかりで、他の人に役立つかもしれません。

Andrewが提案したように、構成設定を使用しました。それを展開すると、構成「defaultProxy」を設定するのに十分な権限がなかったというエラーが顧客に表示されました。

この構成を設定する権利がない理由と、それに対して何をすべきかわからないため、削除しただけでまだ機能していました。したがって、VS2013 ではこの問題は修正されているようです。

そして、私たちがそれに取り組んでいる間:

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

クレデンシャルでデフォルトのプロキシを使用します。プロキシを強制的に使用しないようにしたい場合は、DefaultWebProxy を null に設定するだけです (ただし、それが必要かどうかはわかりません)。

于 2013-12-11T10:24:14.107 に答える
0

これが新しい推奨方法です。

WebRequest.GetSystemWebProxy();
于 2011-01-17T22:30:52.277 に答える
-3

一部のシステムでは、Proxy プロパティを null に設定する必要があります:

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

バグです。

于 2014-11-11T19:42:14.050 に答える