【问题标题】:Set a custom WebProxy for a single HTTP request in .NET Core / UWP在 .NET Core / UWP 中为单个 HTTP 请求设置自定义 WebProxy
【发布时间】:2016-09-30 23:20:04
【问题描述】:

我需要一个简单的 HTTP GET 请求来使用自定义代理。我不是在谈论获取 Windows 默认代理设置,而是自定义设置。

在 Xamarin Android 应用程序中,以下代码确实有效:

string myProxy = "100.100.100.100:7777";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://my_uri"));
request.Proxy = new WebProxy(myProxy, false);`

在 Windows 通用应用项目中,未实现类 WebProxy。所以我按照这个答案创建了一个自定义实现:Location of IWebProxy implementation for .NET Core

我的代码现在是:

public class MyProxy : IWebProxy
{
    public Uri GetProxy(Uri destination)
    {                
       return new Uri("http://100.100.100.100:7777");
    }

    public bool IsBypassed(Uri host)
    {
        return false;
    }

    public ICredentials Credentials { get; set; }
}

然后……

request.Proxy = new MyProxy();

但它不起作用。事实上,如果我在GetProxy 内设置断点,它甚至都不会被命中。 它只是忽略代理设置并使用 Windows 10 默认设置。

【问题讨论】:

    标签: .net xamarin win-universal-app uwp .net-core


    【解决方案1】:

    虽然我们可以在 UWP 应用程序中使用HttpWebRequest Class,但是如果我们查看HttpWebRequest.Proxy Property版本信息,我们会发现这个属性在 UWP 中也没有,如 WebProxy Class。所以你的代码不起作用。

    在 .NET Core/UWP 中,System.Net.HttpWebRequest 类位于 System.Net.Requests 库中。

    .NET Core 5 的 API 表面与适用于 Windows 8.1 应用程序的 API 表面相同,并且与 .NET Framework 中的表面相比非常有限。这是有意为之的,我们强烈建议改用 HttpClient API——这是我们未来的精力和创新的重点。

    提供此库纯粹是为了向后兼容并取消阻止使用使用这些旧 API 的 .NET 库。对于 .NET Core,HttpWebRequest 的实现实际上是基于 HttpClient(从 .NET Framework 中颠倒依赖顺序)。如上所述,这样做的原因是为了避免在 UWP 应用上下文中使用托管 .NET HTTP 堆栈,并将 HttpClient 作为 .NET 开发人员的单个 HTTP 客户端角色 API。

    更多信息,请查看.NET Networking APIs for UWP Apps

    对于 HttpClient:

    对于这两个 API,代理设置会自动从 Internet Explorer/Microsoft Edge 设置中获取,并默认用于所有 HTTP 调用。即使用户通过代理连接到互联网,这也使应用程序能够自动运行。 这两种 API 都不提供为您的应用指定自定义代理的方法。但是,您可以通过将 HttpClientHandler.UseProxy 设置为 false(对于 System.Net.Http)或 HttpBaseProtocolFilter 来选择不使用默认代理。 UseProxy 为 false(对于 Windows.Web.Http)。

    更多信息,请查看Demystifying HttpClient APIs in the Universal Windows Platform

    所以我们现在不能对单个 HTTP 请求使用自定义代理。但欢迎您在 UserVoice 上投票以请求此功能。

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多