WebProxy - 使用 C# 代码或机器来配置

Posted

技术标签:

【中文标题】WebProxy - 使用 C# 代码或机器来配置【英文标题】:WebProxy - use C# code or machine to configure 【发布时间】:2021-12-01 10:48:04 【问题描述】:

我正在编写一个 .NET (C#) Windows 应用程序。我有一个 HttpClientHandler,我为其设置了一个 WebProxy。

不知道不设置代理,使用机器代理设置好不好?或设置 HttpClient 以在代码中使用 WebProxy。 在这两种情况下,结果都是相同的 - 请求将使用相同的代理。

两者之间有更可靠或“行业接受”的选择吗?

如果机器设置都设置了代理,并且代码也设置了代理,会发生什么?

附加说明 - 这两个选择都是我的选择。我不依赖客户的任何选择。这个问题纯粹是在可靠性方面,因为我发现使用机器设置的 WebProxy 设置时,我的客户经常会失败。

【问题讨论】:

不要在代码中设置。您的代码无法知道您的代码可能运行的所有环境的代理是什么,现在和将来。有一天,您的组织将更改其代理详细信息,然后您的所有应用程序都将停止工作! HttpClient 默认支持标准代理配置是有原因的 - 使用它! 在这两种情况下,我都使用我可以控制的外部可配置项。我不以任何方式依赖客户。只是在为机器设置代理设置时出现了一些故障。 在这种情况下,如果您有特定的代理需求,而默认代理支持无法满足,那么您几乎必须在代码中添加自己的代理。如果您可以摆脱使用默认值,那么不要重新发明***。任何一种方法都不应该有任何可靠性问题 - 我想知道您是否应该将这些问题作为一个具体问题提出? 【参考方案1】:

我最近在第一次处理 WebProxy 时遇到了一个非常相似的问题。

我也有一个 HttpClientHandler 来设置我的网络代理。我和我的团队选择在代码中处理这个问题,因为通过单元测试更容易测试和验证。

为了使其可配置,我们让应用从安装时设置的安全配置中读取配置详细信息。如果代理配置更改,可以在配置文件中更新。 这也适用于我们,因为我们的工具是一种数据聚合工具,可以发送到非常特定的 Web API。

我使用带有 HttpClientHandler 的 WebProxy 和我的 HttpClient 来完成所有这些工作。

以下是一些帮助我的链接: MSDN Solution .Net WebProxy doc

【讨论】:

以上是关于WebProxy - 使用 C# 代码或机器来配置的主要内容,如果未能解决你的问题,请参考以下文章

C#中查看当前Request是否使用代理的一种方法

我应该在同一台机器上运行的 Firefox 扩展和 C# 代码之间使用哪种 IPC 方法?

C# - 缓存OutputCache基础配置

通过 C# 代码在远程机器上启动和停止 IIS [关闭]

是否有编译为机器代码的 C C++ C# 编译器 [关闭]

如何加密或隐藏配置文件c#