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

Why is passing RequestUri as a param different than setting it in 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}")
};

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

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

我could/should可能会做类似
的事情 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)
};