这段顺序看起来是显式的,但在 .NET 10 中它最终没有留下任何代理凭据:

proxy.Credentials = new NetworkCredential(proxyUser, proxyPassword);
proxy.UseDefaultCredentials = false;

在 .NET 10 的 WebProxy 实现中,把 UseDefaultCredentials 设为 false 会把 null 赋给 Credentials。设为 true 则会选择 CredentialCache.DefaultCredentials。这两个属性控制的是同一个账户选择。

对于特定于服务的账户,请直接赋上所需的凭据,不要在后面再重置:

var proxy = new WebProxy("http://proxy.example.net:8080")
{
    Credentials = new NetworkCredential(proxyUser, proxyPassword)
};

如果现有设置代码必须显式关闭默认凭据,请在赋值 NetworkCredential 之前做。即使显式凭据已正确存在,其 getter 也可能是 false;false 并不一定意味着没有配置账户。

把这个对象附加到执行请求的 handler 上。对于集成 Windows 身份验证,则应改用进程适用的身份,刻意选择默认凭据。

检查对象初始化器的顺序和辅助方法,看是否有后续赋值替换了预期的账户。把这一诊断绑定到实际使用的 WebProxy 实现上;HTTP handler 上同名的属性可能管辖另一个身份验证范围。

相关文章