.NET Core 6+配置代理连接Azure Blob存储遇407错误求助
解决Azure Blob存储代理407认证错误
问题分析
错误码407表示代理服务器要求身份验证,当前代码未配置代理的认证凭据,导致请求无法通过代理建立隧道连接。
解决方案
通过为Blob客户端配置带认证信息的代理,具体步骤如下:
- 添加必要的命名空间
using System.Net; using System.Net.Http; using System.IO;
配置代理及认证凭据
创建包含代理地址、用户名、密码的WebProxy实例,再关联到HttpClientHandler中。将代理配置应用到Blob客户端
通过CloudBlobClient的配置项注入代理信息。
修改后的完整代码
string blobstorageconnection = pConfig.AzuerBlobStorageConnectionString; CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(blobstorageconnection); CloudBlobClient? blobClient = null; CloudBlockBlob? blockBlob = null; // 配置代理信息,替换为实际代理地址、用户名、密码 var proxy = new WebProxy("http://ipaddress:port/") { Credentials = new NetworkCredential("proxy_username", "proxy_password") }; var httpClientHandler = new HttpClientHandler { Proxy = proxy, UseProxy = true, PreAuthenticate = true // 提前发送认证凭据,减少407重试次数 }; // 创建Blob客户端并应用代理配置 blobClient = cloudStorageAccount.CreateCloudBlobClient(); // 通过自定义HttpClientFactory注入代理配置 blobClient.HttpClientFactory = new DelegatingHttpClientFactory(() => new HttpClient(httpClientHandler)); CloudBlobContainer container = blobClient.GetContainerReference(pConfig.AzureStorageContainerName); blockBlob = container.GetBlockBlobReference(pFileName); // 用Path.Combine替代硬编码路径分隔符,提升跨平台兼容性 await blockBlob.UploadFromFileAsync(Path.Combine(pFilePath, pFileName));
注意事项
- 务必将代码中的
ipaddress:port、proxy_username、proxy_password替换为实际的代理服务信息。 - 如果使用较新版本的
Azure.Storage.BlobsSDK,建议迁移到BlobServiceClient等新API,代理配置逻辑类似,通过BlobClientOptions.Transport注入自定义HttpClientHandler即可。
内容的提问来源于stack exchange,提问作者Srinivas Mohan Pillalamarrri
相关产品推荐
相关产品推荐

