问题描述
在使用.NET HttpClient对象指定主机信息时,如何拨打IP?我们正在使用子域来区分主机,但是我们还需要提供特定的IP来访问我们的测试环境服务器。
示例: 我们想拨打https://12.34.56.78的电话,但我们需要确保该电话访问的是特定的子域(即https://specific_subdomain.company.com)
解决方法
您只需要提供一个Host标头即可指定主机信息:
public async Task<TResult> GetAsync<TResult>(string subdomain,string endPoint)
{
var siteUrl = $"https://{subdomain}.company.com/";
var siteUri = new Uri(siteUrl);
var client = new HttpClient {
BaseAddress = new Uri($"https://{12.34.56.78}:443"),Timeout = new TimeSpan(0,1,0),};
client.DefaultRequestHeaders.Add("Host",siteUri.Host);
// Make the request.
var result = await client.GetAsync($"/{endPoint}")
.ConfigureAwait(false);
var responseString = await result.Content.ReadAsStringAsync()
.ConfigureAwait(false);
return JsonConvert.DeserializeObject<TResult>(responseString);
}
如果您还需要在前面的代码中附加一些cookie(即auth cookie),则可以这样做:
public async Task<TResult> GetAsync<TResult>(string subdomain,string endPoint,Cookie cookie)
{
var siteUrl = $"https://{subdomain}.company.com/";
var siteUri = new Uri(siteUrl);
var client = new HttpClient {
BaseAddress = new Uri($"https://{12.34.56.78}:443"),siteUri.Host);
client.DefaultRequestHeaders.Add("Cookie",$"{cookie.Name}={cookie.Value}");
// Make the request.
var result = await client.GetAsync($"/{endPoint}")
.ConfigureAwait(false);
var responseString = await result.Content.ReadAsStringAsync()
.ConfigureAwait(false);
return JsonConvert.DeserializeObject<TResult>(responseString);
}