仅在IIS服务器上本地运行时,将用户名和密码传递给经过身份验证的代理服务器。 ASP核心2.0

问题描述 投票:0回答:1

我正在开发将部署在Intranet(代理服务器)之外的应用程序,但是我正在代理服务器后面开发该应用程序。代理服务器使用http进行身份验证,并需要用户名和密码。只有在本地运行(调试)应用程序时,有什么方法可以使用我的系统代理凭据吗?该应用程序是ASP核心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,
    };
}
c# asp.net-core asp.net-core-2.0 http-proxy
1个回答
0
投票

我建议在启动文件上注册HttpClient并将其注入到您的Controller或Service。

检查环境(IHostingEnvironment),根据环境,您可以使用代理处理程序或不使用代理处理程序来注册HttpClient。当您在本地工作时,它应该是Development,您可以在其中注册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注入到您的Controller的示例代码(同样,您也可以将其注入到您的Services):

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

    public ValuesController(HttpClient httpClient)
    {
        this.httpClient = httpClient;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.