如何解决如何使用HttpClient与特定主机调用IP
在使用.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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。