ejemplo - wcf service c# example
HttpClient con BaseAddress (1)
Tengo un problema al llamar a un punto final de WCF webHttpBinding utilizando HttpClient y la propiedad BaseAddress .
HttpClient
HttpClient una instancia de HttpClient especificaba la propiedad BaseAddress como un punto final del host local.
Llamada GetAsync
Luego llamo al método GetAsync pasando la información adicional de Uri.
HttpResponseMessage response = await client.GetAsync(string.Format("/Layouts/{0}", machineInformation.LocalMachineName()));
Punto final de servicio
[OperationContract]
[WebGet(UriTemplate = "/Layouts/{machineAssetName}", ResponseFormat = WebMessageFormat.Json)]
List<LayoutsDto> GetLayouts(string machineAssetName);
Problema
El problema que tengo es que la parte /AndonService.svc
de BaseAddress se está truncando, por lo que la llamada resultante va a https://localhost:44302/Layouts/1100-00277
lugar de https://localhost:44302/AndonService.svc/Layouts/1100-00277
resulta en un 404 No encontrado.
¿Hay alguna razón por la que la Dirección de base esté siendo truncada en la llamada GetAsync? ¿Cómo puedo solucionar esto?
En la https://localhost:44302/AndonService.svc/
, solo incluya la barra final: https://localhost:44302/AndonService.svc/
. Si no lo hace, la parte final de la ruta se descarta, ya que no se considera un "directorio".
Este código de ejemplo ilustra la diferencia:
// 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"