web-dev-qa-db-fra.com

HttpClient avec BaseAddress

J'ai un problème pour appeler un point de terminaison WCF webHttpBinding en utilisant HttpClient et la propriété BaseAddress .

HttpClient

J'ai créé une instance HttpClient spécifiant la propriété BaseAddress en tant que point de terminaison hôte local.

enter image description here

Appel GetAsync

J'appelle ensuite la méthode GetAsync en passant les informations Uri supplémentaires.

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

enter image description here

Point de terminaison de service

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

Problème

Le problème que j'ai, c'est que le /AndonService.svc une partie de BaseAddress est tronquée de sorte que l'appel résultant passe à https://localhost:44302/Layouts/1100-00277 plutôt que https://localhost:44302/AndonService.svc/Layouts/1100-00277 résultant en un 404 Not Found.

Y a-t-il une raison pour laquelle BaseAddress est tronquée dans l'appel GetAsync? Comment puis-je contourner cela?

23
Phil Murray

Dans le BaseAddress, incluez simplement la barre oblique finale: https://localhost:44302/AndonService.svc/. Si vous ne le faites pas, la dernière partie du chemin est supprimée, car elle n'est pas considérée comme un "répertoire".

Cet exemple de code illustre la différence:

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