考虑以下代码,其中BaseAddress
定义了部分URI路径。
using (var handler = new HttpClientHandler())
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri("http://something.com/api");
var response = await client.GetAsync("/resource/7");
}
我希望这将执行一个对http://something.com/api/resource/7
的GET
请求。但事实并非如此。
经过一番搜索,我找到了这个问题和答案:HttpClient with BaseAddress。建议将/
放在BaseAddress
的末尾。
using (var handler = new HttpClientHandler())
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri("http://something.com/api/");
var response = await client.GetAsync("/resource/7");
}
它还是不能工作。这是文档:HttpClient.BaseAddress这是怎么回事?
发布于 2021-04-07 04:09:01
我在BaseAddress
上也遇到了同样的问题。我决定根本不使用BaseAddress
,最简单的解决方案是添加一个简单的一行代码:
Uri GetUri(string path) => new Uri("http://something.com/api" + path);
那么你的代码就会变成:
Uri GetUri(string path) => new Uri("http://something.com/api" + path);
using (var handler = new HttpClientHandler())
using (var client = new HttpClient(handler))
{
// Remove BaseAddress completely
// client.BaseAddress = new Uri("http://something.com/api");
var response = await client.GetAsync(GetUri("/resource/7"));
}
我没有调查过使用BaseAddress
的利弊,但对我来说,这是完美无瑕的。希望这对某些人有帮助。
发布于 2019-03-18 03:43:46
遇到了HTTPClient的问题,即使有了建议,它仍然无法进行身份验证。原来我的相对路径中需要一个尾随的'/‘。
即
var result = await _client.GetStringAsync(_awxUrl + "api/v2/inventories/?name=" + inventoryName);
var result = await _client.PostAsJsonAsync(_awxUrl + "api/v2/job_templates/" + templateId+"/launch/" , new {
inventory = inventoryId
});
https://stackoverflow.com/questions/23438416
复制相似问题