Установите прокси-сервер уровня приложения в проекте .Net 5.0

#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");