HttpClient と BaseAddress プロパティを使用して webHttpBinding WCFエンドポイントを呼び出すときに問題があります。
HttpClient
ローカルホストエンドポイントとして BaseAddress プロパティを指定して HttpClient インスタンスを作成しました。
GetAsync Call
次に、追加のUri情報を渡して GetAsync メソッドを呼び出します。
HttpResponseMessage response = await client.GetAsync(string.Format("/Layouts/{0}", machineInformation.LocalMachineName()));
サービスエンドポイント
[OperationContract]
[WebGet(UriTemplate = "/Layouts/{machineAssetName}", ResponseFormat = WebMessageFormat.Json)]
List<LayoutsDto> GetLayouts(string machineAssetName);
問題
私が抱えている問題は、それが/AndonService.svc
BaseAddressの一部が切り捨てられているため、結果の呼び出しはhttps://localhost:44302/Layouts/1100-00277
むしろ https://localhost:44302/AndonService.svc/Layouts/1100-00277
結果として404 Not Foundが発生します。
GetAsync呼び出しでBaseAddressが切り捨てられる理由はありますか?どうすればこれを回避できますか?
BaseAddress
には、最後のスラッシュを含めるだけです:https://localhost:44302/AndonService.svc/
。そうしないと、「ディレクトリ」とは見なされないため、パスの最後の部分は破棄されます。
このサンプルコードは、違いを示しています。
// No final slash
var baseUri = new Uri("https://localhost:44302/AndonService.svc");
var uri = new Uri(baseUri, "Layouts/1100-00277");
Console.WriteLine(uri);
// Prints "https://localhost:44302/Layouts/1100-00277"
// With final slash
var baseUri = new Uri("https://localhost:44302/AndonService.svc/");
var uri = new Uri(baseUri, "Layouts/1100-00277");
Console.WriteLine(uri);
// Prints "https://localhost:44302/AndonService.svc/Layouts/1100-00277"