C# GraphSdk 的代理配置

Kar*_*rdt 5 c# http-proxy microsoft-graph-api

我需要通过代理中继 C# Graph-Sdk 发出的 HTTP 请求。

在文档中,我找不到有关代理设置的任何信息。我目前找到的唯一解决方法是更改​​全局代理设置:

System.Net.GlobalProxySelection.Select = proxy;
or
System.Net.WebRequest.DefaultWebProxy = proxy;
Run Code Online (Sandbox Code Playgroud)

可悲的是,在我的情况下,如果不将所有与图形相关的功能移动到一个单独的进程中,这是不可能的(因为主进程的其余部分需要在没有代理的情况下运行)。

所以我的问题是:

  • sdk 中是否有对代理设置的官方支持?

  • 是否计划为未来的 sdk 版本支持代理设置?

Mic*_*ner 7

您可以在实例化 GraphServiceClient 时设置代理。

2021 年 6 月 9 日更新

现在有一个更好的方法是使用 GraphClientFactory。

HttpClient httpClient = GraphClientFactory.Create(GetClientCredentialProvider(), "v1.0", "Global", new WebProxy(""));
var graphServiceClient = new(httpClient);
Run Code Online (Sandbox Code Playgroud)

旧答案

System.Net.Http.HttpClientHandler httpClientHandler = new System.Net.Http.HttpClientHandler()
{
    AllowAutoRedirect = false,
    Proxy = new WebProxy() // TODO: Set your proxy settings. 
};

HttpProvider httpProvider = new HttpProvider(httpClientHandler, true);

GraphServiceClient client = new GraphServiceClient("https://graph.microsoft.com/v1.0",
        new DelegateAuthenticationProvider(
            async (requestMessage) =>
            {
                var token = await goGetSomeTokenNow();
                requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", token);

            }), httpProvider);
Run Code Online (Sandbox Code Playgroud)