2016-04-22 120 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

相关问题