在net 4.5中,我们正在使用这样的代理:
<system.net>
<!-- -->
<defaultProxy enabled="true" useDefaultCredentials="false">
<proxy usesystemdefault="True" proxyaddress="http://192.168.1.1:8888" bypassonlocal="True" autoDetect="False" />
<module type="CommonLibrary.Proxy.MyProxy, CommonLibrary, Version=1.0.0.0, Culture=neutral" />
</defaultProxy>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
<servicePointManager expect100Continue="false" />
</settings>
</system.net>
但是在asp.net核心或测试中,我们无法找到类似上述的解决方案 有人可以帮助我吗?
我真的很感谢你的帮助
谢谢,问候
答案 0 :(得分:6)
要在.net核心中使用HTTP代理,您必须实现IWebProxy
接口。这来自System.Net.Primitives.dll
程序集。您可以将其添加到project.json
(如果尚未添加)
e.g。
"frameworks": {
"dotnet4.5": {
"dependencies": {
"System.Net.Primitives": "4.3.0"
}
}
}
实施非常简单
public class MyHttpProxy : IWebProxy
{
public MyHttpProxy()
{
//here you can load it from your custom config settings
this.ProxyUri = new Uri(proxyUri);
}
public Uri ProxyUri { get; set; }
public ICredentials Credentials { get; set; }
public Uri GetProxy(Uri destination)
{
return this.ProxyUri;
}
public bool IsBypassed(Uri host)
{
//you can proxy all requests or implement bypass urls based on config settings
return false;
}
}
var config = new HttpClientHandler
{
UseProxy = true,
Proxy = new MyHttpProxy()
};
//then you can simply pass the config to HttpClient
var http = new HttpClient(config)
结帐https://msdn.microsoft.com/en-us/library/system.net.iwebproxy(v=vs.100).aspx
答案 1 :(得分:4)
您应该使用中间件。你有没看过这个:
https://github.com/aspnet/Proxy
有一个'samples'文件夹: https://github.com/aspnet/Proxy/tree/dev/samples/Microsoft.AspNetCore.Proxy.Samples
有关该主题的其他资源: http://josephwoodward.co.uk/2016/07/proxying-http-requests-asp-net-core-using-kestrel
http://overengineer.net/creating-a-simple-proxy-server-middleware-in-asp-net-core
中间件是否适合您?
答案 2 :(得分:2)
尽管可以在可能的情况下使用HttpClientHander
来手动设置代理,但是默认情况下,所有没有代码的请求都是默认的,就像目前在.NET Framework中所做的那样。如果您使用的库没有公开此功能,那真是太可惜了。
GitHub中的以下问题正在研究使用环境变量将此功能引入.NET Core:https://github.com/dotnet/corefx/issues/24574
我会建议任何正在寻找解决方案的人来解决该问题,以检查当前的实施状态。
答案 3 :(得分:2)
您可以在web.config中将代理明确设置为环境变量,以及应跳过的域。例如:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Your.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="http_proxy" value="http://yourproxy.ins.local"/>
<environmentVariable name="https_proxy" value="http://yourproxy.ins.local"/>
<environmentVariable name="no_proxy" value=".local,.applicationinsights.azure.com,.applicationinsights.microsoft.com,.services.visualstudio.com"/>
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
答案 4 :(得分:-1)
另一个未完成的工作是:
将.NET Core应用程序部署到Web服务器后(我的是IIS)。根文件夹中实际上有一个web.config文件。
手动添加
<system.net>
<defaultProxy useDefaultCredentials="true">
</defaultProxy>
</system.net>
或您的特定设置将起到魔力
仅适用于服务器。您的本地版本仍然无效。