HttpClient BaseAddress が機能しないのはなぜですか? 質問する

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。しかし、実行されません。

少し検索してみたところ、次の質問と回答を見つけました。BaseAddress を使用した HttpClient/の末尾に配置することをお勧めします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.ベースアドレス何が起きてる?

ベストアンサー1

と、メソッド (または の他のメソッド)BaseAddressに渡される相対 URI の末尾または先頭のスラッシュを含めるか含めないかの 4 つの可能な順列のうち、機能する順列は1 つだけであることがわかりました。次の例のように、 の末尾にスラッシュを配置する必要があり、相対 URI の先頭にスラッシュを配置してはなりません。GetAsyncHttpClientBaseAddress

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");
}

私は自分の質問に答えましたが、この不親切な動作は文書化されていないため、ここで解決策を提供することにしました。同僚と私は、この奇妙な動作によって最終的に引き起こされた問題を解決するために、1 日の大半を費やしましたHttpClient

おすすめ記事