为什么将RequestUri作为参数传递与在HttpRequestMessage中设置不同



我有一个HttpClient(由IHttpClientFactory生成(,其BaseAddress为"www.mydomain.com/3.0/"。我将使用不同的方法使用不同的路径访问该客户端。因此,我首先设置一个HttpRequestMessage。我注意到这两个实现的行为不同。

此:

var message = new HttpRequestMessage(HttpMethod.Get, $"account-lookup/?query={email}")
{
Headers =
{
{ key, value }
}
};

工作。但是这个:

var message = new HttpRequestMessage()
{
Method = HttpMethod.Get,
Headers =
{
{ key, value }
},
RequestUri = new Uri($"account-lookup/?query={email}")
};

返回异常Invalid URI: The format of the URI could not be determined.

我们不能用这样的字符串创建新的Uri,是吗。为什么我们没有一个属性或方法,让我们在一个路径字符串中传递?我假设HttpRequestMessage的构造函数在内部将传递的属性附加或连接到BaseAddress?

我可能可以/应该做一些类似于
RequestUri = new Uri(Client.BaseAddress + $"account-lookup/?query={email}")
的事情,但如果能以某种方式添加路径字符串,那就太好了。

您必须指定URL是相对的,才能将其与基本地址组合:

var message = new HttpRequestMessage()
{
Method = HttpMethod.Get,
Headers = ...,
RequestUri = new Uri($"account-lookup/?query={email}", UriKind.Relative)
};

最新更新