我正在开发将部署在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,
};
}
我建议在启动文件上注册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;
}
}