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.
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()));
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?
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"