我有一个C#.NET程序(4.7.1),我想使用默认的系统代理(如果有的话)。
当我将以下代码放入App.Config文件中时:
Faulting application name: myprogram.exe, version: 0.01.6652.23883, time stamp: 0x5aaf246f
Faulting module name: KERNELBASE.dll, version: 10.0.16299.15, time stamp: 0x2cd1ce3d
Exception code: 0xe0434352
Fault offset: 0x001008b2
Faulting process id: 0x1220
Faulting application start time: 0x01d3bf2e95ca9d05
Faulting application path: C:\source\myprogram.exe
Faulting module path: C:\Windows\System32\KERNELBASE.dll
Report Id: 5a60273b-637f-4dac-ae09-5539fb563884
Faulting package full name:
Faulting package-relative application ID:
应用程序在KERNELBASE.dll启动时崩溃,没有错误,并立即退出。
我已经使用fiddler(进行一些测试)在localhost上设置了代理
我可以在事件日志中找到以下错误,这个错误不是很有用:
{{1}}
我出错的任何想法以及如何在C#.NET程序中使用默认代理?
答案 0 :(得分:0)
根据the docs:
proxy
元素定义应用程序的代理服务器。如果配置文件中缺少此元素,则.NET Framework将使用Internet Explorer中的proxy
设置。
我冒昧地猜测你试图运行它的机器没有Internet Explorer,导致崩溃。
在任何情况下,添加代理服务器设置以确保您的应用程序将在未安装Internet Explorer的计算机上运行是有意义的。
<configuration>
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy
usesystemdefault="true"
proxyaddress="http://192.168.1.10:3128"
bypassonlocal="true"
/>
</defaultProxy>
</system.net>
</configuration>
如果您想检测代理,则无法使用app.config
执行此操作,因为.NET中不存在该功能。相反,你必须做一些事情:
WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy;
if (proxy.Address.AbsoluteUri != string.Empty)
{
Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri);
wc.Proxy = proxy;
}
答案 1 :(得分:0)
这就是我最后做的事情(基本上是 NightOwl888 建议的),并添加了 GetSystemWebProxy
var proxy = WebRequest.GetSystemWebProxy();
_webRequestHandler = new WebRequestHandler { ClientCertificateOptions = ClientCertificateOption.Automatic };
_webRequestHandler.Proxy = proxy;
_client = new HttpClient(_webRequestHandler);
_client.BaseAddress = new Uri(connectionUrl);
_client.Timeout = new TimeSpan(0,0,0,timeoutSeconds);