在asp.net core rc2中指定代理

时间:2016-05-17 00:44:53

标签: asp.net-web-api asp.net-core dotnet-httpclient coreclr

我正在尝试使用dotnet核心应用中的WebAPI为请求指定Web代理。当我定位实际的clr(dnx46)时,这段代码曾经工作但是,现在我正在尝试使用rc2这些支持框架的东西是netcoreapp1.0和netstandard1.5。

var clientHandler = new HttpClientHandler{
    Proxy = string.IsNullOrWhiteSpace(this._clientSettings.ProxyUrl) ? null : new WebProxy (this._clientSettings.ProxyUrl, this._clientSettings.BypassProxyOnLocal),
    UseProxy = !string.IsNullOrWhiteSpace(this._clientSettings.ProxyUrl)
};

我想知道WebProxy类去了哪里。我无法在任何地方找到它,甚至在github存储库中也找不到它。如果它从WebProxy改变了,它改变了什么? 我需要能够将代理设置为特定请求的特定URL,因此使用“全局Internet Explorer”方式不能满足我的需求。这主要用于调试Web请求/响应目的。

1 个答案:

答案 0 :(得分:6)

今天遇到同样的问题。事实证明,我们必须提供自己的IWebProxy实现。幸运的是,它并不复杂:

public class MyProxy : IWebProxy
{
    public MyProxy(string proxyUri)
        : this(new Uri(proxyUri))
    {
    }

    public MyProxy(Uri proxyUri)
    {
        this.ProxyUri = proxyUri;
    }

    public Uri ProxyUri { get; set; }

    public ICredentials Credentials { get; set; }

    public Uri GetProxy(Uri destination)
    {
        return this.ProxyUri;
    }

    public bool IsBypassed(Uri host)
    {
        return false; /* Proxy all requests */
    }
}

你会像这样使用它:

var config = new HttpClientHandler
{
    UseProxy = true,
    Proxy = new MyProxy("http://127.0.0.1:8118")
};

using (var http = new HttpClient(config))
{
    var ip = http.GetStringAsync("https://api.ipify.org/").Result;

    Console.WriteLine("Your IP: {0}");
}

在您的特定情况下,您甚至可以让逻辑确定您的IWebProxy实现中是否需要代理。