在.NET Core/UWP中为单个HTTP请求设置自定义WebProxy

在.NET Core/UWP中为单个HTTP请求设置自定义WebProxy,.net,xamarin,win-universal-app,uwp,.net-core,.net,Xamarin,Win Universal App,Uwp,.net Core,我需要一个简单的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(myPr

我需要一个简单的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
。因此,我按照这个答案创建了一个自定义实现:

我的代码是:

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默认设置。

虽然我们可以在UWP应用程序中使用,但如果查看的版本信息,我们会发现此属性在UWP-like中也不可用。所以你的代码不起作用

在.NETCore/UWP中,System.NET.HttpWebRequest类位于System.NET.Requests库中

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

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

有关更多信息,请参阅

对于HttpClient:

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

有关更多信息,请参阅

因此,我们现在无法对单个HTTP请求使用自定义代理。但欢迎您在上投票请求此功能