猿问

为什么HttpClient BaseAddress不起作用?

考虑以下代码,其中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");

}

我希望这能向发出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这是怎么回事?


幕布斯7119047
浏览 1085回答 3
3回答

饮歌长啸

参考解析由RFC 3986统一资源标识符(URI):通用语法描述。这正是它应该如何工作的。要保留基本URI路径,您需要在基本URI的末尾添加斜杠,并在相对URI的开始处删除斜杠。如果基本URI包含非空路径,则合并过程将丢弃它的最后一部分(在last之后/)。相关部分:5.2.3。合并路径上面的伪代码是指“合并”例程,用于将相对路径引用与基本URI的路径合并。这可以通过以下方式完成:如果基本URI具有已定义的权限组件和空路径,则返回由“ /”和引用路径组成的字符串。除此以外返回一个字符串,该字符串包含附加到基本URI路径的最后一段之外的所有引用的引用的路径部分(即,排除基本URI路径中最右边的“ /”之后的任何字符,或者排除整个基本URI路径)不包含任何“ /”字符)。如果相对URI以斜杠开头,则称为绝对路径相对URI。在这种情况下,合并过程将忽略所有基本URI路径。有关更多信息,请检查5.2.2。变换参考部分。
随时随地看视频慕课网APP
我要回答