我的 .NET 应用程序存在代理问题。 当在公司代理后面本地运行它时,我无法访问 Cosmos DB,因为它接收来自我的 VPN IP 而不是白名单代理服务器 IP 的调用。
我使用 proxydetox 管理我的代理设置,该代理在 localhost:3128 上运行,无需身份验证。本地主机也在我的 MacOS 代理设置中设置,因此使用浏览器或像curl这样的工具使用代理服务器IP。
如何让我的 dotnet 应用程序使用代理设置?在 .NET 的文档中,它指出它通常使用系统范围的代理设置,但情况似乎并非如此。
此处使用代理设置的一种方法是使用带有
HttpClient
属性的 WebProxy
。如何让 Cosmos 或 Logger 服务使用此 HttpClient
或代理设置? Startup.cs
看起来像这样:
public class Startup
{
public IConfiguration Configuration { get; }
private readonly IWebHostEnvironment _env;
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
_env = env;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// other services...
services.AddCosmosDb(Configuration);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//...
}
appsettings.json 包含以下内容:
{
"CosmosOptions": {
"AccessKey": "<Your Cosmos DB Access Key Here>",
"EndpointUri": "<Your Cosmos DB Endpoint URI Here>",
"DatabaseName": "MyBackend",
"DirectConnection": true,
"HasBulkExecutionEnabled": false,
"MaxRetryWaitTimeInSeconds": 30,
"Documents": [
{
"Name": "Feature",
"TimeToLiveDays": -1,
"PartitionKeyName": "pk",
"DocumentClass": "Feature",
"SetOfferThroughputOnStartup": false
}
]
}
}
当您创建
CosmosClient
时,您可以传递 CosmosClientOptions
。
您可以使用 CosmosClientOptions.WebProxy 属性,或者,如果您有自定义 HttpClient,则可以使用 CosmosClientOptions.HttpClientFactory。
这是为代理场景定制 HttpClient 的两个场所。