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

.NET Core 8中Flurl默认代理未使用当前用户凭据问题

问题描述

我正在构建一个.NET Core 8应用,使用Flurl向REST API发送HTTP请求。手动配置带凭据的代理时请求正常,但依赖系统默认代理设置时,请求不会自动使用当前用户的凭据,抛出异常:代理隧道请求至代理'http://my-proxy:myport/'失败,状态码'407'。同一用户在命令行执行cURL却能正常访问目标API。

相关代码如下:

// 取消注释以下代码即可正常运行:
//FlurlHttp.Clients.WithDefaults( builder => builder
//  .ConfigureInnerHandler( hch => {
//      hch.PreAuthenticate = true;
//      // 需要当前用户凭据:
//      hch.Proxy = new System.Net.WebProxy( "http://my-proxy:myport", true, null, new NetworkCredential( "mydomain\mylogin", "mypassword" ) );
//      hch.UseProxy = true;
//  } ) );

var response = await "https://the-oauth-server/oauth/token"
    .PostUrlEncodedAsync( new {
        client_id = "my-client-id",
        client_secret = "my-client-secret",
        grant_type = "client_credentials",
        scope = "the-scope"
    } );

我尝试过以下两种方式但未解决问题:

  • 设置代理为系统默认代理:
    hch.Proxy = System.Net.WebRequest.GetSystemWebProxy();
    
  • 设置凭据为默认凭据:
    hch.Proxy.Credentials = CredentialCache.DefaultCredentials;
    
解决方案

在.NET Core环境中,CredentialCache.DefaultCredentials无法自动将NTLM/Kerberos凭据传递给代理,需要显式配置使用当前用户的默认网络凭据,同时确保代理配置逻辑完整。

修改Flurl的默认客户端配置,完整代码如下:

FlurlHttp.Clients.WithDefaults(builder => builder
    .ConfigureInnerHandler(hch => {
        hch.PreAuthenticate = true;
        // 获取系统默认代理配置
        var systemProxy = System.Net.WebRequest.GetSystemWebProxy();
        // 绑定当前用户的网络凭据到代理
        systemProxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
        hch.Proxy = systemProxy;
        hch.UseProxy = true;
    })
);

关键细节说明:

  • 使用DefaultNetworkCredentials:这个属性专门针对网络请求场景,能正确获取当前登录用户的Kerberos/NTLM凭据,适配代理的身份认证需求;而DefaultCredentials主要用于本地资源访问,不适合网络代理场景。
  • 显式绑定凭据到系统代理:仅获取系统代理配置不够,必须手动将用户凭据绑定到代理对象,才能让Flurl底层的HttpClientHandler自动携带凭据发起请求,和cURL的行为保持一致。
  • 开启PreAuthenticate:让请求在首次连接时就发送凭据,避免代理返回407后再进行重试,提升请求的效率和稳定性。

内容的提问来源于stack exchange,提问作者Théo Uzan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:52:48