2016-04-22 63 views
2

使用Azure Active Directory圖形客戶端API,我將如何將底層HttpClient配置爲使用HttpClientHander,我可以在其中定義經過身份驗證的應用程序代理?將AuthenticationContext和ActiveDirectoryClient與應用程序代理一起使用?

var proxy = new WebProxy(...); 
proxy.Credentials = ...; 
var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true}; 
var auth = new AuthenticationContext(...); 
var client = new ActiveDirectoryClient(...); 

或者,我不能在代理服務器後面使用Graph Client嗎?

謝謝

回答

0

我在探索同樣的問題。它採取了一些挖掘,但我找到了一個解決方案。現在,我意識到你具體問了如何應用HttpClientHandler。我不知道這是否可以做到;但是,您可以申請一個代理。就是這樣。

ActiveDirectoryClient類提供了一個名爲ContextDataServiceContextWrapper屬性,這並不奇怪是DataServiceContext的包裝。

這很好。它減少了解決如何將代理應用於DataServiceContext類的問題。我使用了一些我曾坐過的舊代碼,事情幾乎爆炸了。這是因爲我使用了已棄用的SendingRequest事件來攔截請求並在其出去之前應用代理。此客戶端與已棄用的事件不兼容。

花了多一點的時間去了解如何使用SendingRequest2事件來完成它;它只需要一點點類型鑄造。

這樣做:

var client = new ActiveDirectoryClient(...); 
client.Context.SendingRequest2 += OnSendingRequest2; 

// ... 

static void OnSendingRequest2(object sender, SendingRequest2EventArgse) 
{ 
    var request = ((HttpWebRequestMessage)e.RequestMessage).HttpWebRequest; 
    request.Proxy = new WebProxy("http://myproxy:port"); 
} 

不這樣做:(它已被廢棄,就會產生異常。)

var client = new ActiveDirectoryClient(...); 
client.Context.SendingRequest += OnSendingRequest; 

// ... 

static void OnSendingRequest(object sender, SendingRequestEventArgs e) 
{ 
    e.Request.Proxy = new WebProxy("http://myproxy:port"); 
} 
+0

感謝kbrimington,我很欣賞的努力。我會將其標記爲答案,但我無法及時驗證。 – JohnKoz

相關問題