考虑以下代码,其中BaseAddress定义了部分URI路径。
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"); }
我希望这能向发出GET请求http://something.com/api/resource/7。但事实并非如此。
GET
http://something.com/api/resource/7
经过一些搜索,我找到了这个问题和答案:HttpClient与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和相对URI的尾部或前导斜杠以及传递给该方法(或其他方法)的相对URI 中HttpClient,只有 一种 排列有效。您 必须 在的末尾放置一个斜杠BaseAddress,并且 不能 在相对URI的开头放置一个斜杠,如以下示例所示。
GetAsync
HttpClient
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。