2013-12-16 9 views
17

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

のHttpClient

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

enter image description here

GetAsyncコール

は、私はその後、追加のウリのinforamtionを渡し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); 

問題

私が午前問題はようBASEADDRESSの/AndonService.svc一部が切り捨てられていることであるということです結果のコールは行くむしろhttps://localhost:44302/AndonService.svc/Layouts/1100-00277が、404が見つかりませんでした。https://localhost:44302/Layouts/1100-00277になります。

GetAsync呼び出しでBaseAddressが切り捨てられる理由はありますか?これをどうやって回避するのですか?

+0

可能複製を(http://stackoverflow.com/questions/23438416/why-is-httpclient-baseaddress-動作していません) –

答えて

40

BaseAddressには、最後のスラッシュ(https://localhost:44302/AndonService.svc/)だけが含まれています。そうしないと、パスの最後の部分は破棄されます。なぜなら、 "ディレクトリ"とはみなされないからです。

このサンプル・コードは差示す:[なぜHttpClientをBASEADDRESSが動作していない]の

// 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" 
+0

ありがとうございました。シンプルな修正 –

+2

私の質問と答えはこちらをご覧ください:http://stackoverflow.com/questions/23438416/why-is-httpclient-baseaddress-not-workingこの回答は重要な詳細を残しています。 –