はじめに
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
の引数の先頭は/
をつけない