You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft Graph SDK报仅支持HTTP/1.0/1.1版本请求异常

异常触发原因
  • 异常发生在客户端本地的请求参数校验阶段,早于实际网络发包环节,因此Fiddler无法捕获到HTTP/2.0的出站请求,请求并未真正发送到网络层。
  • 核心触发逻辑:.NET 5及以上版本中,HttpClient的DefaultRequestVersion属性默认值为HttpVersion.Version20,而当前使用的Microsoft Graph SDK、Azure.Identity依赖的Azure.Core版本内置了请求版本校验逻辑,仅允许HTTP/1.0、HTTP/1.1版本的请求,检测到版本为2.0时会直接抛出ArgumentException。
  • 额外配置遗漏:仅将自定义HttpClientTransport配置给了用于获取身份令牌的TokenCredentialOptions,但初始化GraphServiceClient时没有指定自定义HTTP提供器,SDK内部会自行创建默认HttpClient实例,该实例同样默认使用HTTP/2.0版本,也会触发校验异常。
修复方案

可选择以下任意一种方案解决问题:

  • 方案一:显式配置所有用到的HttpClient强制使用HTTP/1.1版本,同时将配置好的客户端复用给认证流程和Graph请求流程,避免多实例配置不一致,修改后的代码如下:
private async Task<UserAccount> FetchAzurePropsFromGraph()
{
    var scopes = new[] { "User.Read" };
    var clientId = EWSMailboxSyncProvider.CLIENT_ID;
    var tenantId = ServicesConfiguration.GetStoredTenantID();
    
    // 初始化HttpClient并显式指定默认请求版本为HTTP/1.1
    System.Net.Http.HttpClient client = new System.Net.Http.HttpClient
    {
        DefaultRequestVersion = Version.Parse("1.1")
    };
    var transport = new Azure.Core.Pipeline.HttpClientTransport(client);
    var options = new TokenCredentialOptions
    {
        AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
        Transport = transport
    };

    var userNamePasswordCredential = new UsernamePasswordCredential(
            _o365UserName, _o365Password, tenantId, clientId, options);
    
    // 为Graph客户端指定使用已配置好的HttpClient实例,避免内部默认客户端触发版本校验错误
    var httpProvider = new Microsoft.Graph.HttpProvider(
        new HttpClientHandler(), 
        new Serializer(), 
        client);
    var graphClient = new Microsoft.Graph.GraphServiceClient(
        new BaseClient("https://graph.microsoft.com/v1.0", userNamePasswordCredential, httpProvider), 
        scopes);
    
    var user = await graphClient.Users[_emailAddress].Request().GetAsync();
    var result = new UserAccount();
    if (user != null)
    {
        result.DisplayName = user.DisplayName;
        result.City = user.City;
        result.Company = user.CompanyName;
        result.DisabledAccount = !(user.AccountEnabled ?? true);
        result.DistinguishedName = user.OnPremisesDistinguishedName;
        result.DomainName = user.OnPremisesDomainName;
        result.EmailAddresses.Add(user.Mail);
        foreach (var mail in user.OtherMails)
        {
            result.EmailAddresses.Add(mail);
        }
    }
    return result;
}
  • 方案二:将项目中引用的Microsoft.Graph、Azure.Identity、Azure.Core包升级到最新稳定版本,新版本已移除HTTP/2.0的版本限制,支持直接使用默认HTTP/2配置发起请求,无需额外修改版本参数。

内容的提问来源于stack exchange,提问作者Shani Natav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:48:21