从配置文件配置 HttpClient/HttpMessageHandler
Configuring HttpClient/HttpMessageHandler from config file
我的 appsettings.json 文件包含以下部分。
"TrackAndTrace": {
"DebugBaseUrl": "https://localhost:44360/api",
"BaseUrl": "https://example.com/api",
"Username": "Username",
"Password": "Password",
"CompanyCode": "CODE"
},
然后我按如下方式配置 HttpClient
:
services.AddHttpClient<TestApi>()
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
// I want to incorporate this somehow:
// services.Configure<TrackAndTraceSettings>(Configuration.GetSection("TrackAndTrace"))
Credentials = new NetworkCredential(????, ???),
};
});
我的问题是:如何从此处的配置文件中获取用户名和密码,并将其分配给HttpClientHandler.Credentials
?
理想情况下,它可以以一种高效的方式完成,这样它只需要从设置文件中读取一次。
// assuming you've set up the configuration in ConfigureServices method:
// services.Configure<TrackAndTraceSettings>(Configuration.GetSection("TrackAndTrace"))
services.AddHttpClient<TestApi>()
.ConfigurePrimaryHttpMessageHandler((serviceProvider) =>
{
var config = serviceProvider.GetRequiredService<IOptions<TrackAndTraceSettings>>().Value;
return new HttpClientHandler()
{
Credentials = new NetworkCredential(config.Username, config.Password),
};
});
您可以使用
var credentials = Configuration.GetSection("TrackAndTrace").Get<TrackAndTrace>();
TrackAndTrace模型应该是这样的;
public class TrackAndTrace{
public string DebugBaseUrl {get;set;}
public string BaseUrl {get;set;}
public string Username {get;set;}
public string Password {get;set;}
public string CompanyCode {get;set;}
}
然后您必须配置服务;
var credentials = Configuration.GetSection("TrackAndTrace").Get<TrackAndTrace>();
services.AddHttpClient<TestApi>()
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
Credentials = new NetworkCredential(credentials.Username, credentials.Password),
};
});
我的 appsettings.json 文件包含以下部分。
"TrackAndTrace": {
"DebugBaseUrl": "https://localhost:44360/api",
"BaseUrl": "https://example.com/api",
"Username": "Username",
"Password": "Password",
"CompanyCode": "CODE"
},
然后我按如下方式配置 HttpClient
:
services.AddHttpClient<TestApi>()
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
// I want to incorporate this somehow:
// services.Configure<TrackAndTraceSettings>(Configuration.GetSection("TrackAndTrace"))
Credentials = new NetworkCredential(????, ???),
};
});
我的问题是:如何从此处的配置文件中获取用户名和密码,并将其分配给HttpClientHandler.Credentials
?
理想情况下,它可以以一种高效的方式完成,这样它只需要从设置文件中读取一次。
// assuming you've set up the configuration in ConfigureServices method:
// services.Configure<TrackAndTraceSettings>(Configuration.GetSection("TrackAndTrace"))
services.AddHttpClient<TestApi>()
.ConfigurePrimaryHttpMessageHandler((serviceProvider) =>
{
var config = serviceProvider.GetRequiredService<IOptions<TrackAndTraceSettings>>().Value;
return new HttpClientHandler()
{
Credentials = new NetworkCredential(config.Username, config.Password),
};
});
您可以使用
var credentials = Configuration.GetSection("TrackAndTrace").Get<TrackAndTrace>();
TrackAndTrace模型应该是这样的;
public class TrackAndTrace{
public string DebugBaseUrl {get;set;}
public string BaseUrl {get;set;}
public string Username {get;set;}
public string Password {get;set;}
public string CompanyCode {get;set;}
}
然后您必须配置服务;
var credentials = Configuration.GetSection("TrackAndTrace").Get<TrackAndTrace>();
services.AddHttpClient<TestApi>()
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
Credentials = new NetworkCredential(credentials.Username, credentials.Password),
};
});