【问题标题】:Set Application level proxy in .Net 5.0 project在 .Net 5.0 项目中设置应用程序级代理
【发布时间】:2021-11-25 21:30:15
【问题描述】:

我必须为 .net 5.0 应用程序设置代理。我提到了https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.defaultproxy?view=net-5.0,它提到我可以设置 HTTP_PROXY 环境变量,它将用于所有调用。 另一种选择是我使用 HttpClientHandler 为每个客户端设置代理。

有没有办法可以在应用程序级别设置代理,这样其他应用程序就不会受到影响(这可能发生在设置 env 变量的情况下)?而且我不想在单个客户端级别(HttpClient、SecretClient 等)设置代理。

【问题讨论】:

  • 链接文档备注的第一行指出“如果在通过其构造函数传递的HttpClientHandler 中未显式设置代理,则此静态属性确定所有HttpClient 实例使用的默认代理。 "因此,当您的应用程序初始化时,将该静态属性设置为代理。然后它将在应用程序级别设置。

标签: c# asp.net .net .net-5


【解决方案1】:

这适用于进程级别的所有客户端(httpclient 和 SecretClient)。

 HttpClientHandler handler = new HttpClientHandler();
 handler.Proxy = new WebProxy("Proxyaddress:proxyPort", true);
 Environment.SetEnvironmentVariable("HTTP_PROXY", "Proxyaddress:proxyPort");
 Environment.SetEnvironmentVariable("HTTPS_PROXY", "Proxyaddress:proxyPort");

【讨论】:

    【解决方案2】:

    环境变量不一定是系统范围的。

    Wikipedia 声明,“在所有 Unix 和类 Unix 系统中,以及在 Windows 上,每个进程都有自己独立的一组环境变量。默认情况下,当一个进程被创建时,它会继承一个副本其父进程的运行时环境”。

    如果您不设置系统范围的变量,环境变量将保留在该进程及其子进程中。

    在同一进程或子进程中启动应用程序会导致您描述的问题,但是当您使用不同的进程时应该没问题。

    如果您仍然担心干扰,这也可以与 Dockerfile 一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多