Je souhaite créer une application Web api pour connecter xamarin à Android.
J'avais beaucoup essayé, mais des erreurs de connexion sont à venir.
Mon code est donné ci-dessous:
public async Task<JsonValue> find(int ID)
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:49836");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage result = client.GetAsync("api/Product").Result;
return JsonConvert.DeserializeObject<JsonValue>(await result.Content.ReadAsStringAsync());
}
}
}
Je reçois l'erreur comme ci-dessous
System.Net.WebException: Erreur: ConnectFailure (connexion refusée) ---> System.Net.Sockets.SocketException: connexion refusée
Quelqu'un peut-il aider. Toute aide est appréciée.
Notez que, si vos services Web sont hébergés par IIS Express, sachez que vous ne pouvez pas vous connecter à IIS Express à partir de périphériques externes car, de manière inhérente, IIS Express ne répond qu'à la demande du machine locale. Ainsi, à partir des émulateurs Android en tant que périphériques externes (virtuels), nous ne pouvons pas envoyer de demandes à IIS Express. La solution consiste à utiliser IIS au lieu de IIS Express.
Cette réponse peut venir un peu tard, mais pour ceux qui en ont besoin: Si vous utilisez un émulateur Android, demander le service Web localhost ne fonctionnera pas, car vous chercherez l'hôte local de l'émulateur. Comment peux-tu réparer cela? Eh bien, Android Emulator a une adresse magique http://10.0.2.2:your_port qui pointe vers 127.0.0.1:your_port sur votre ordinateur hôte. Jetez un oeil ici . Comme il pointe vers une adresse IP et non sur un hôte local, vous devez accéder à la solution de votre projet, dans .vs folder-> config-> applicationhost.config et modifier ce <binding protocol="http" bindingInformation="*:13142:localhost" />
into <binding protocol="http" bindingInformation="*:13142:127.0.0.1" />
, où 13142 est mon port, le vôtre peut être différent. Redémarrez IIS Express et vous êtes prêt à partir.
J'ai résolu le problème de la façon de télécharger des données du serveur via asp.net web api et, pour commencer, je le recommande simplement.
Essayez d'utiliser l'adresse complète, par exemple.
Vérifiez que la connexion de données est activée.
Assurez-vous que vous avez le bon chemin (par exemple, lorsque vous activez le wifi, qui passe par le serveur sur lequel vous WebAPI, donc pas l'adresse complète, mais l'adresse d'un serveur local).
Voici un code simple qui fonctionne dans mon cas (commencez par simple, puis passez ensuite)
using (WebClient webClient = new WebClient())
{
webClient.Encoding = System.Text.Encoding.UTF8;
string result = webClient.DownloadString(new Uri("https://webapi.domain.cz/api/root"));
}
j'ai résolu ce problème en utilisant l'adresse IP pas utiliser localhost
Essayez de modifier votre fichier Hosts en ajoutant un nouveau nom d’hôte à 127.0.0.1.
127.0.0.1 mylocalmachine #this name can be any you want
Maintenant, vous pouvez demander avec cette URL
client.BaseAddress = new Uri("http://mylocalmachine:49836");
Cela se produit parce que localhost est dans le contexte de votre émulateur, appelez donc localhost du téléphone.
Au lieu d'utiliser hostname, vous pouvez faire ce que Culy Ch vise.
Si votre service Web est hébergé par IIS, vous devrez procéder à une configuration supplémentaire pour pouvoir accepter les demandes provenant de périphériques ou de serveurs externes. (simulateur iOS, projet séparé sur une autre machine de développement, etc.)
Pour ce faire, suivez les suggestions de cette réponse au débordement de pile: Comment activer la requête externe dans IIS Express?