C# Windows上的.net core 3.0未忽略任何_代理

C# Windows上的.net core 3.0未忽略任何_代理,c#,dotnet-httpclient,http-proxy,.net-core-3.0,C#,Dotnet Httpclient,Http Proxy,.net Core 3.0,我们正在尝试在Windows上的.Net Core 3.0(或3.1)应用程序中使用代理功能。我们发现HTTPS_代理和HTTP_代理变量按照预期进行识别和处理,但默认代理似乎不支持NO_代理变量。以下是示例代码: HttpClient client = new HttpClient(); IWebProxy myProxy = HttpClient.DefaultProxy; Uri target = new Uri(args[0]); Uri proxy = myProxy.GetP

我们正在尝试在Windows上的.Net Core 3.0(或3.1)应用程序中使用代理功能。我们发现HTTPS_代理和HTTP_代理变量按照预期进行识别和处理,但默认代理似乎不支持NO_代理变量。以下是示例代码:

 HttpClient client = new HttpClient();
 IWebProxy myProxy = HttpClient.DefaultProxy;
 Uri target = new Uri(args[0]);
 Uri proxy = myProxy.GetProxy(target);
 Console.WriteLine($"Target proxy for {target} is {proxy} {myProxy.IsBypassed(target)}");
如果我从Powershell运行此操作:

if (-not $env:path.Contains('c:\data\src')) {
    $env:path = "$env:Path;C:\data\src\Local\DefaultProxy\bin\Debug\netcoreapp3.0"
}
$env:HTTPS_PROXY = 'http://10.11.10.10'
$env:NO_PROXY = '*'
DefaultProxy https://www.contoso.com
我得到: 的目标代理为False

我希望得到空白和真实


我应该更改什么,以便可以使用NO_PROXY将域从默认代理中排除?

我提取了.Net Core 3.1的代码并通读了一遍。在no_代理中不支持“*”。因此,这根本行不通。此外,对GetProxy的调用完全忽略NO_代理值。需要删除NO_代理列表中的域。前缀(这是标准的,但没有特别详细的文档)。我可以使用这些信息来更改对文档的解释,并获得更好的结果

因此,如果我修改powershell代码如下:

$env:HTTPS_PROXY = 'http://10.11.10.10'
$env:NO_PROXY = '.contoso.com'
DefaultProxy https://www.contoso.com
然后我得到:的目标代理是真的


大概DefaultProxy逻辑将使用IsBypassed结果true来停止NO_代理列表上的代理。

context?对这篇文章展示了.NETCore3.0支持这些变量的意图。我正在努力让它在我解释文档时工作。如果可以的话,我会把它升级1000次!您在ASP.NET核心HttpEnvironmentProxy代码中的发现是解决所有问题的关键。我们的默认内部配置在NO_代理列表中使用*(通配符)。这就是为什么ASP.NET Core 3.1及更高版本被错误地通过代理路由请求的原因,尽管它被列在NO_proxy中。HttpEnvironmentProxy.cs第246行的
.EndsWith()
调用是揭开整个谜团的关键。