はじめに
HttpClient でhttp://example.com/base/test/apiにリクエストしたいとします。 HttpClient は以下のようにBaseAddressで初期化し、GetAsyncを使ってリクエストを実行します。
var client = new HttpClient
{
BaseAddress = new Uri("<ベースとなるURI>")
};
var res = await client.GetAsync("<アクセスしたいパス>");設定する値によってリクエストする URI が代わる
BaseAddress, GetAsyncそれぞれに設定する値によって、リクエストする URI が変わります。
BaseAddress にパスを含めない場合は期待通りになる
BaseAddressがhttp://example.comもしくはhttp://example.com/の場合は、GetAsyncにどのような引数を渡してもリクエストする URI は期待通りです。
パスを含める場合、最後の/の有無でリクエスト URI が変化する
BaseAddressにパスを含む URI を設定すると、最後に/があるかないかで結果が変わります。
意図しない URI になってしまう可能性があるということです。
結論
1. BaseAddress にパスを含ませない
パスを含ませると、意図しないリクエスト URI になる可能性があります。
基本的にパスを含ませないようにしましょう。
2. BaseAddress にパスを含ませる場合は/に気をつける
BaseAddressにパスを含む場合は最後に/を入れましょう。GetAsyncの引数にも注意しましょう。先頭の/の有無で生成される URI は変化します。
つまり、パスを含ませる場合は以下の 2 点を守りましょう。
BaseAddressは必ず最後/で終わるGetAsyncの引数の先頭は/をつけない