2016-04-22 3 views
2

Использование API-интерфейса Azure Active Directory Graph Client, как мне настроить базовый 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(...); 

Или, могу ли я использовать графический клиент за прокси-сервером?

Thanks

ответ

0

Я изучал ту же проблему. Потребовалось некоторое рытье, но я нашел решение. Теперь, я понимаю, вы спросили, как применять HttpClientHandler. Я не знаю, можно ли это сделать; однако вы можете применить прокси-сервер. Вот как.

ActiveDirectoryClient класс предоставляет DataServiceContextWrapperContext свойство, которое, не удивительно, что обертка к 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