.net - 如何使用 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"),
Timeout = new TimeSpan(0, 1, 0),
};
client.DefaultRequestHeaders.Add("Host", 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);
}
推荐阅读
- rust - 无法使用 Rust FFI 链接到 harfbuzz 动态库
- python - 从 json 对象更改特定键的所有值
- spring-boot - 如何在 Spring Boot 中使用 Shedlock 释放调度程序的锁?
- javascript - Angular [CDK v10+] 在拖放 CDK 中找不到合适的替代“进入”已弃用功能的方法
- javascript - 具有相同ID的多个按钮的Onclick功能?
- ios - 图像未显示在其他 iOS 设备上
- ruby-on-rails - 成功运行 rake db:create 后,docker 中的 Rails 应用程序返回数据库不存在
- python - Amazon SP API Feeds API 处理报告:产品类型无效
- purescript - 如何在 purescript 中获取产品类型的构造函数名称?类似于 haskell conNameOf
- android - Nativescript Cardview 风格