asp.net核心defaultProxy

时间:2017-03-06 23:35:12

标签: c# asp.net asp.net-core asp.net-core-mvc asp.net-core-middleware

在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核心或测试中,我们无法找到类似上述的解决方案 有人可以帮助我吗?

我真的很感谢你的帮助

谢谢,问候

5 个答案:

答案 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)

答案 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>

或您的特定设置将起到魔力

仅适用于服务器。您的本地版本仍然无效。