В моей компании машины разработчиков находятся за прокси-сервером. У меня есть сценарий, в котором мне нужно предоставить свои учетные данные, и я выполняю это через HttpClient.DefaultProxy. Однако на промежуточных и производственных серверах прокси отсутствует. Я хотел бы определить, работает ли приложение на локальном хосте, и установить только прокси-сервер по умолчанию в этом сценарии. Раньше я просматривал HttpRequest, чтобы определить эту информацию. Для этого мне нужно применить логику в файле запуска.
Пока единственное решение, которое я придумал и которое является достаточно чистым, — это проверка подключенного отладчика. Однако это не идеальный вариант, поскольку мы также запускаем эти приложения локально без подключенного отладчика.
Другой вариант — использовать промежуточное программное обеспечение, а затем проверить URL-адрес на «localhost», но это кажется чрезмерным.
Любые идеи будут оценены!
public void ConfigureServices(IServiceCollection services)
{
if (/*Some clean way to determine IsLocal*/)
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
Чтобы уточнить, чтобы предотвратить удаление вопроса: я хотел бы определить, существует ли localhost перед httprequest.
Обновление Я решил использовать lauchSetting.json, который тоже не идеален, но лучше всего подходит для моего случая. . Я подробно обрисую все варианты и их плюсы и минусы для любого будущего разработчика, занимающего ту же должность.
Вариант 1: Добавить локальную среду
Проблемы: Если у вас уже есть конфигурации для конкретной среды, вам придется потратить время на копирование и вставку конфигурации, если вы хотите настроить «промежуточную» настройку из своего «локального» файла конфигурации. .
Код
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.IsEnvironment("Local"))
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
Вариант 2. Создайте промежуточное ПО для проверки localhost в URL-адресе запроса
Проблемы: В зависимости от того, как он реализован, он может запускаться слишком часто. Это также не работает, если ваша локальная версия не использует localhost в URL-адресе.
Вариант 3. Используйте launchSettings.json для размещения переменной среды
Проблемы: В зависимости от вашей IDE это может не работать. Предполагается, что вы зафиксировали файл launchSettings.json.
Код
{
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"IsLocal": "True"
}
}
}
}
public void ConfigureServices(IServiceCollection services)
{
if (Environment.GetEnvironmentVariable("IsLocal") == "True")
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
Вариант 3.5: Используйте реальную переменную среды
Проблемы: Требуется дополнительная настройка разработчика помимо проверки кода и запуска
Вариант 4: Используйте имена компьютеров, чтобы определить, является ли разработчик или сервер
Проблемы. Предполагается, что все машины разработчиков используют какой-то тип стандарт.
Код
public void ConfigureServices(IServiceCollection services)
{
if (Environment.MachineName.StartsWith("DEV", StringComparison.OrdinalIgnoreCase))
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
Вариант 5. Проверьте наличие подключенного отладчика.
Проблемы: Отладчик не работает. Он всегда подключается при локальном запуске
Кода
public void ConfigureServices(IServiceCollection services)
{
if (Debugger.IsAttached)
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
Вариант 6: Используйте проверку отладки во время компиляции
Проблемы: Может не потребоваться для компиляции отладки в каждом сценарии
Код
#if(DEBUG)
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
#endif
Подробнее здесь: https://stackoverflow.com/questions/606 ... -localhost
Определите, работает ли веб-приложение ASP.Net Core на локальном хосте. ⇐ C#
Место общения программистов C#
1736222574
Anonymous
В моей компании машины разработчиков находятся за прокси-сервером. У меня есть сценарий, в котором мне нужно предоставить свои учетные данные, и я выполняю это через HttpClient.DefaultProxy. Однако на промежуточных и производственных серверах прокси отсутствует. Я хотел бы определить, работает ли приложение на локальном хосте, и установить только прокси-сервер по умолчанию в этом сценарии. Раньше я просматривал HttpRequest, чтобы определить эту информацию. Для этого мне нужно применить логику в файле запуска.
Пока единственное решение, которое я придумал и которое является достаточно чистым, — это проверка подключенного отладчика. Однако это не идеальный вариант, поскольку мы также запускаем эти приложения локально без подключенного отладчика.
Другой вариант — использовать промежуточное программное обеспечение, а затем проверить URL-адрес на «localhost», но это кажется чрезмерным.
Любые идеи будут оценены!
public void ConfigureServices(IServiceCollection services)
{
if (/*Some clean way to determine IsLocal*/)
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
[b]Чтобы уточнить, чтобы предотвратить удаление вопроса: я хотел бы определить, существует ли localhost перед httprequest.[/b]
[b]Обновление[/b] Я решил использовать lauchSetting.json, который тоже не идеален, но лучше всего подходит для моего случая. . Я подробно обрисую все варианты и их плюсы и минусы для любого будущего разработчика, занимающего ту же должность.
[b]Вариант 1:[/b] Добавить локальную среду
[b]Проблемы:[/b] Если у вас уже есть конфигурации для конкретной среды, вам придется потратить время на копирование и вставку конфигурации, если вы хотите настроить «промежуточную» настройку из своего «локального» файла конфигурации. .
[b]Код[/b]
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.IsEnvironment("Local"))
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
[b]Вариант 2.[/b] Создайте промежуточное ПО для проверки localhost в URL-адресе запроса
[b]Проблемы:[/b] В зависимости от того, как он реализован, он может запускаться слишком часто. Это также не работает, если ваша локальная версия не использует localhost в URL-адресе.
[b]Вариант 3.[/b] Используйте launchSettings.json для размещения переменной среды
[b]Проблемы: [/b] В зависимости от вашей IDE это может не работать. Предполагается, что вы зафиксировали файл launchSettings.json.
[b]Код[/b]
{
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"IsLocal": "True"
}
}
}
}
public void ConfigureServices(IServiceCollection services)
{
if (Environment.GetEnvironmentVariable("IsLocal") == "True")
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
[b]Вариант 3.5:[/b] Используйте реальную переменную среды
[b]Проблемы:[/b] Требуется дополнительная настройка разработчика помимо проверки кода и запуска
[b]Вариант 4:[/b] Используйте имена компьютеров, чтобы определить, является ли разработчик или сервер
[b]Проблемы.[/b] Предполагается, что все машины разработчиков используют какой-то тип стандарт.
[b]Код[/b]
public void ConfigureServices(IServiceCollection services)
{
if (Environment.MachineName.StartsWith("DEV", StringComparison.OrdinalIgnoreCase))
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
[b]Вариант 5.[/b] Проверьте наличие подключенного отладчика.
[b]Проблемы:[/b] Отладчик не работает. Он всегда подключается при локальном запуске
[b]Кода[/b]
public void ConfigureServices(IServiceCollection services)
{
if (Debugger.IsAttached)
{
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
}
}
[b]Вариант 6:[/b] Используйте проверку отладки во время компиляции
[b]Проблемы:[/b] Может не потребоваться для компиляции отладки в каждом сценарии
[b]Код[/b]
#if(DEBUG)
//Need to provide proxy credentials for local development only
var proxyCredentials = new NetworkCredential(Configuration["ProxyCredentials:Username"], Configuration["ProxyCredentials:Password"]);
HttpClient.DefaultProxy = new WebProxy("http://proxy.company.com:80", false, null, proxyCredentials);
#endif
Подробнее здесь: [url]https://stackoverflow.com/questions/60622201/determine-if-asp-net-core-webapp-is-running-on-localhost[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия