web-dev-qa-db-ja.com

BaseAddressを使用したHttpClient

HttpClientBaseAddress プロパティを使用して webHttpBinding WCFエンドポイントを呼び出すときに問題があります。

HttpClient

ローカルホストエンドポイントとして BaseAddress プロパティを指定して HttpClient インスタンスを作成しました。

enter image description here

GetAsync Call

次に、追加のUri情報を渡して GetAsync メソッドを呼び出します。

HttpResponseMessage response = await client.GetAsync(string.Format("/Layouts/{0}", machineInformation.LocalMachineName()));

enter image description here

サービスエンドポイント

[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が切り捨てられる理由はありますか?どうすればこれを回避できますか?

23
Phil Murray

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"
46
Thomas Levesque