2016-04-22 3 views
2

À l'aide de l'API Azure Active Directory Graph Client, comment configurer le HttpClient sous-jacent pour utiliser un HttpClientHander, où je peux définir un proxy d'application authentifié?Utilisation de AuthenticationContext & ActiveDirectoryClient avec un proxy d'application?

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

Ou, ne puis-je pas utiliser le client graphique derrière un proxy?

Merci

Répondre

0

J'explorais le même problème. Il a fallu creuser, mais j'ai trouvé une solution. Maintenant, je me rends compte que vous avez demandé spécifiquement comment appliquer un HttpClientHandler. Je ne sais pas si cela peut être fait; Cependant, vous pouvez appliquer un proxy. Voici comment.

La classe ActiveDirectoryClient fournit une propriété appelée DataServiceContextWrapperContext, qui est, sans surprise, une enveloppe à un DataServiceContext.

C'est bon. Cela réduit le problème à déterminer comment appliquer un proxy à la classe DataServiceContext. J'ai utilisé un vieux code que j'avais assis, et les choses ont plutôt explosé. C'est parce que j'ai utilisé l'événement obsolète SendingRequest pour intercepter une demande et appliquer un proxy avant qu'il ne sorte de la porte. Ce client n'est pas compatible avec l'événement déprécié.

Il a fallu creuser un peu plus pour comprendre comment le faire avec l'événement SendingRequest2; il a seulement exigé un petit moulage de type.

Faites ceci:

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"); 
} 

Ne pas le faire: (Il est dépréciée et produira une exception.)

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

// ... 

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

Merci kbrimington, j'apprécie l'effort. Je vais le marquer comme une réponse, mais je ne serai pas en mesure de vérifier en temps opportun. – JohnKoz