首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# GraphSdk的代理配置

C# GraphSdk的代理配置
EN

Stack Overflow用户
提问于 2018-02-13 14:40:59
回答 2查看 2.9K关注 0票数 5

我需要通过代理转发由C# Graph发出的HTTP请求。

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

代码语言:javascript
运行
复制
System.Net.GlobalProxySelection.Select = proxy;
or
System.Net.WebRequest.DefaultWebProxy = proxy;

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

所以我的问题是:

  • 在sdk中是否有对代理设置的官方支持?
  • 是否计划在将来的sdk-版本中支持代理设置?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-13 22:19:56

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

更新6/9/2021

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

代码语言:javascript
运行
复制
HttpClient httpClient = GraphClientFactory.Create(GetClientCredentialProvider(), "v1.0", "Global", new WebProxy(""));
var graphServiceClient = new(httpClient);

旧答案

代码语言:javascript
运行
复制
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);
票数 7
EN

Stack Overflow用户

发布于 2021-07-27 04:11:00

Microsoft.Graph 4+在文章中有一种新的方法。但是我不得不使用两种方式来实现这一点,因为我们的蔚蓝的adfs只有来自浏览器的auth请求。希望这对其他人都有帮助。

代码语言:javascript
运行
复制
private GraphServiceClient GetGraphClient()
{
    string[] scopes = new string[] { "User.Read", "User.ReadBasic.All", "Mail.Read", "Mail.ReadWrite", "Mail.Send" };

    var msalFactory = new MsalHttpClientFactoryOwn(_configuration);

    IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
    .Create("")
    .WithTenantId("")
    .WithHttpClientFactory(msalFactory)
    .Build();

    UsernamePasswordProvider authProvider = new UsernamePasswordProvider(publicClientApplication, scopes);

    HttpClient httpClient = GraphClientFactory.Create(authProvider, "v1.0", "Global", msalFactory.GetWebProxy());
    var graphClient = new GraphServiceClient(httpClient);
    
    return graphClient;
}

public class MsalHttpClientFactoryOwn : IMsalHttpClientFactory
{
    private readonly IConfiguration configuration;

    public ProxiedHttpClientFactory(IConfiguration configuration)
    {
        this.configuration = configuration;
    }

    public HttpClient GetHttpClient()
    {
        var proxyHttpClientHandler = new HttpClientHandler() 
        { 
            UseProxy = true,
            UseDefaultCredentials = false,
            Credentials = GetNetworkCredentials(),
            Proxy = GetWebProxy()
        };

        var httpClient = new HttpClient(proxyHttpClientHandler);
        httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");
        httpClient.Timeout = TimeSpan.FromMinutes(30);

        return httpClient;
    }

    public WebProxy GetWebProxy()
    {
        var proxy = new WebProxy
        {
            Address = new Uri("proxy address"),
            BypassProxyOnLocal = false,
            UseDefaultCredentials = false,
            Credentials = GetNetworkCredentials()
        };

        return proxy;
    }

    private NetworkCredential GetNetworkCredentials()
    {
        var networkCreds =  new NetworkCredential(u, p);
        return networkCreds;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48769325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档