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

M K*_* II 1 c# httpclient httprequest

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

这:

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

作品。但是这个:

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

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

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

我可以/应该做类似的事情
RequestUri = new Uri(Client.BaseAddress + $"account-lookup/?query={email}")
,但是以某种方式附加路径字符串会很好。

sil*_*ire 5

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

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