2016-05-17 118 views
4

我試圖在dotnet核心應用程序中使用WebAPI指定請求的Web代理。這段代碼在我針對實際的clr(dnx46)時用於工作,但現在我試圖使用rc2的東西,它說支持的框架是netcoreapp1.0和netstandard1.5。在asp.net核心rc2中指定代理

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改變了,它會改變什麼? 我需要能夠將代理設置爲特定請求的特定網址,因此使用「全局Internet Explorer」方式不適合我的需求。這主要用於調試Web請求/響應目的。

回答

5

今天遇到同樣的問題。原來,我們必須提供我們自己的實施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裏面執行代理確定。

+0

我遇到了類似的問題,但有一個區別。我需要使用默認系統代理。但是.net框架設置代理爲空的工作。如果我錯了,請糾正。 – neleus