Передайте имя пользователя и пароль прокси-серверу, прошедшему проверку подлинности, при локальном запуске только на сервере IIS. ASP ядро ​​2.0 - PullRequest
0 голосов
/ 06 апреля 2020

Я разрабатываю приложение, которое будет развернуто за пределами intr anet (прокси-сервер), но я разрабатываю приложение за прокси-сервером. Прокси-сервер использует http для аутентификации и требует имя пользователя и пароль. Можно ли использовать учетные данные прокси-сервера системы только при локальном запуске (отладке) приложения? Приложение представляет собой приложение ASP core 2.0. Это фрагмент кода, который я использую: я хочу, чтобы httpClientHandler использовался при запуске отладки, только когда приложение развернуто, мне это не нужно, поскольку оно развернуто вне прокси-сервера. Как мне этого добиться?

await new HttpClient(ProxyConfig.httpClientHandler).SendAsync(request).ConfigureAwait(false);
public class ProxyConfig
{
    public static WebProxy proxy = new WebProxy
    {
        Address = new Uri($"http://***.***.***.com:8080"),
        BypassProxyOnLocal = false,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(userName: "****", password: "****")
    };
    public static HttpClientHandler httpClientHandler = new HttpClientHandler()
    {
        Proxy = proxy,
    };
}

1 Ответ

1 голос
/ 06 апреля 2020

Я бы предложил зарегистрировать HttpClient в файле запуска и добавить его в свой контроллер или службу.

Проверка среды (IHostingEnvironment), в зависимости от среды вы можете зарегистрировать либо HttpClient с обработчиком прокси, либо без обработчик прокси. Пока вы работаете локально, это должна быть разработка, где вы можете зарегистрировать HttpClient с прокси. В противном случае вы будете использовать экземпляр HttpClient без настройки прокси.

Ниже приведен пример кода для регистрации HttpClient:

public class Startup
{
    private readonly IHostingEnvironment hostingEnvironment;

    public Startup(IHostingEnvironment hostingEnvironment)
    {
        this.hostingEnvironment = hostingEnvironment;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        if(hostingEnvironment.IsDevelopment())
        {
            var httpClient = new HttpClient(new HttpClientHandler()
            {
                // Set your proxy details here
            });
            services.AddSingleton(httpClient);
        }
        else
        {
            services.AddSingleton<HttpClient, HttpClient>();
        }
    }        

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
    }
}

и пример кода для внедрения HttpClient в ваш контроллер (аналогично вы можете внедрить его в ваши услуги):

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly HttpClient httpClient;

    public ValuesController(HttpClient httpClient)
    {
        this.httpClient = httpClient;
    }
}
...