#c# #asp.net #.net #.net-5
Вопрос:
Я должен установить прокси-сервер для приложения .net 5.0. Я сослался https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.defaultproxy?view=net-5.0 в котором упоминалось, что я могу установить переменную среды HTTP_PROXY, которая будет использоваться для всех вызовов. Другой вариант-я использую HttpClientHandler для установки прокси-сервера для каждого клиента.
Есть ли способ настроить прокси-сервер на уровне приложения, чтобы другие приложения не пострадали(это может произойти в случае установки переменной env)? И я не хочу устанавливать прокси на уровне отдельного клиента(HttpClient, SecretClient и т. Д.).
Комментарии:
1. В первой строке Комментариев связанной документации говорится: «Это статическое свойство определяет прокси-сервер по умолчанию, который
HttpClient
используют все экземпляры, если прокси-сервер явно не задан вHttpClientHandler
переданном через его конструктор». Поэтому, когда ваше приложение будет инициализировано, установите это статическое свойство для прокси-сервера. Затем он будет установлен на уровне приложения.
Ответ №1:
Переменные среды не обязательно являются общесистемными.
Чтобы заявить из Википедии: «Во всех Unix и Unix-подобных системах, а также в Windows, каждый процесс имеет свой собственный отдельный набор переменных среды. По умолчанию при создании процесса он наследует дублирующую среду выполнения своего родительского процесса».
Если вы не зададите переменные в масштабах всей системы, переменные среды останутся в этом процессе и его дочерних элементах.
Запуск приложений в одном и том же процессе или дочернем процессе приведет к описанной вами проблеме, но при использовании разных процессов все должно быть в порядке.
Это также можно использовать с файлами Dockerfiles, если вы все еще беспокоитесь о помехах.
Ответ №2:
Это работало для всех клиентов(httpclient и SecretClient) на уровне процесса.
HttpClientHandler handler = new HttpClientHandler();
handler.Proxy = new WebProxy("Proxyaddress:proxyPort", true);
Environment.SetEnvironmentVariable("HTTP_PROXY", "Proxyaddress:proxyPort");
Environment.SetEnvironmentVariable("HTTPS_PROXY", "Proxyaddress:proxyPort");