2013-12-16 14 views
17

Ho riscontrato un problema nel chiamare un endpoint WCF webHttpBinding utilizzando HttpClient e la proprietà BaseAddress.HttpClient con BaseAddress

HttpClient

ho creato un'istanza HttpClient specificando la proprietà BaseAddress come endpoint host locale.

enter image description here

GetAsync chiamata

ho quindi chiamare il metodo GetAsync passando nel supplementare inforamtion Uri.

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

enter image description here

endpoint di Service

[OperationContract] 
[WebGet(UriTemplate = "/Layouts/{machineAssetName}", ResponseFormat = WebMessageFormat.Json)] 
List<LayoutsDto> GetLayouts(string machineAssetName); 

Problema

Il problema che sto avendo è che il è che /AndonService.svc parte del BaseAddress viene troncato in modo che il la chiamata risultante va a https://localhost:44302/Layouts/1100-00277 piuttosto che https://localhost:44302/AndonService.svc/Layouts/1100-00277 risultante in un 404 non trovato.

C'è un motivo per cui il BaseAddress viene troncato nella chiamata GetAsync? Come faccio a evitare questo?

+0

possibile duplicato di [? Perché HttpClient BaseAddress non funziona] (http://stackoverflow.com/questions/23438416/why-is-httpclient-baseaddress- non funzionante) –

risposta

40

Nel numero BaseAddress, includere solo la barra finale: https://localhost:44302/AndonService.svc/. Se non lo fai, la parte finale del percorso viene scartata, perché non è considerata una "directory".

Questo codice di esempio illustra la differenza:

// 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

Grazie. Correzione semplice –

+2

Si prega di vedere la mia domanda e la risposta qui: http://stackoverflow.com/questions/23438416/why-is-httpclient-baseaddress-not-working Questa risposta lascia un dettaglio importante. –