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

我预计这将执行从GEThttp://something.com/api/resource/7的请求.但事实并非如此.

经过一番搜索,我找到了这个问题和答案: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中的任何其他方法——只有one种排列有效.在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.

.net相关问答推荐

.NET Blazor-使用子组件中的处理程序方法进行双向数据绑定

如何运行大量阻塞/同步 I/O 操作

如何计算给定2个字符串的距离相似性度量?

线程安全性的单元测试?

调整小数精度,.net

从 byte[] 创建 zip 文件

在 .NET 反射中使用 GetProperties() 和 BindingFlags.DeclaredOnly

为什么 Any() 不适用于 c# null 对象

如何防止和/或处理 StackOverflowException?

如何将自定义 UserControl 显示为对话框?

数据库架构更改后更新 LINQ to SQL 类的最佳方法

WCF服务客户端:内容类型text/html;响应消息的charset=utf-8 与绑定的内容类型不匹配

如何保护我的 .NET 程序集免受反编译?

mscorlib 代表什么?

无法使用 Unity 将依赖项注入 ASP.NET Web API 控制器

如何访问 Session 变量并在 javascript 中设置它们?

WPF中的依赖属性和附加属性有什么区别?

NServiceBus 与 MassTransit

MultipleActiveResultSets=True 还是多个连接?

不签署 .NET 程序集有什么问题吗?