В моей компании машины разработчиков находятся за прокси-сервером. У меня есть сценарий, в котором мне нужно предоставить свои учетные данные, и я выполняю это через 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#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Веб-API ASP.NET Core 8 с Swagger, который не работает как веб-приложение на локальном хосте
Anonymous » » в форуме C# - 0 Ответы
- 62 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как очистить кэш для файлов бритвы при работе с веб -приложением ASP.NET на локальном хосте
Anonymous » » в форуме C# - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ошибка http 404 визуальной студии ASP.NET MVC на локальном хосте. Ресурс не найден.
Anonymous » » в форуме C# - 0 Ответы
- 48 Просмотры
-
Последнее сообщение Anonymous
-