将 AuthenticationContext 和 ActiveDirectoryClient 与应用程序代理一起使用?

Using AuthenticationContext & ActiveDirectoryClient with an application proxy?

使用 Azure Active Directory 图形客户端 API,我如何配置底层 HttpClient 以使用 HttpClientHander,我可以在其中定义经过身份验证的应用程序代理?

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

或者,我不能在代理后面使用 Graph Client 吗?

谢谢

我也在探索同样的问题。进行了一些挖掘,但我找到了解决方案。现在,我知道您特别询问了如何应用 HttpClientHandler。我不知道这是否可以做到;但是,您可以申请代理。方法如下。

ActiveDirectoryClient class 提供了一个名为 ContextDataServiceContextWrapper 属性,毫不奇怪,它是 DataServiceContext 的包装器.

这很好。它将问题简化为弄清楚如何将代理应用于 DataServiceContext class。我使用了一些我闲置的旧代码,然后事情就爆炸了。这是因为我使用了已弃用的 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");
}

有点晚了,但我 运行 遇到了同样的问题。 在 app.config 中使用下面的代码挽救了我的一天!

 <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>