gpt4 book ai didi

c# - 为什么 HttpClient BaseAddress 不起作用?

转载 作者:IT王子 更新时间:2023-10-29 03:29:03 26 4
gpt4 key购买 nike

考虑以下代码,其中 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这是怎么回事?

最佳答案

事实证明,在包括或排除 BaseAddress 上的尾部或前导正斜杠以及传递给 GetAsync 方法的相对 URI 的四种可能排列中 - - 或者 HttpClient 的任何其他方法 - 只有 一个 排列有效。您必须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");
}

虽然我回答了我自己的问题,但我想我会在这里提供解决方案,因为这种不友好的行为没有记录在案。我和我的同事花了一天的大部分时间来解决一个问题,这个问题最终是由 HttpClient 的这种奇怪现象引起的。

关于c# - 为什么 HttpClient BaseAddress 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com