Ich möchte eine Web-API-Anwendung erstellen, um Xamarin mit Android zu verbinden.
Ich hatte viel versucht, aber einige Verbindungsfehler kommen.
Mein Code ist unten angegeben:
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());
}
}
}
Ich bekomme die Fehlermeldung wie unten
System.Net.WebException: Fehler: ConnectFailure (Verbindung abgelehnt) ---> System.Net.Sockets.SocketException: Verbindung abgelehnt
Kann jemand helfen. Jede Hilfe wird geschätzt.
Wenn Ihre Webdienste von IIS Express gehostet werden, sollten Sie wissen, dass Sie keine Verbindung zu IIS Express von externen Geräten herstellen können, da IIS Express inhärent nur auf die Anforderung von reagiert lokale Maschine. Daher können von Android-Emulatoren als externen (virtuellen) Geräten keine Anforderungen an IIS Express gesendet werden. Die Lösung ist die Verwendung von IIS anstelle von IIS Express.
Diese Antwort kann etwas zu spät kommen, aber für diejenigen, die sie benötigen: Wenn Sie einen Android-Emulator verwenden, funktioniert die Abfrage nach dem localhost-Webdienst nicht, da Sie sich den localhost des Betriebssystems ansehen Emulator. Wie können Sie das beheben? Nun, Android Emulator hat eine magische Adresse http://10.0.2.2:your_port , die auf 127.0.0.1:your_port auf Ihrem Host-Rechner verweist. Schauen Sie here . Da es auf eine IP und nicht auf localhost verweist, müssen Sie in .vs Ordner-> config-> applicationhost.config in Ihre Projektlösung gehen und diese <binding protocol="http" bindingInformation="*:13142:localhost" />
into <binding protocol="http" bindingInformation="*:13142:127.0.0.1" />
ändern, wobei 13142 mein Port ist. Ihr Port kann anders sein. Starten Sie IIS Express neu und Sie können fortfahren.
Ich habe das Problem gelöst, wie man Daten vom Server über asp.net web api herunterlädt, und für den Start empfehle ich den einfachen Weg.
Versuchen Sie, die vollständige Adresse zu verwenden, z.
Stellen Sie sicher, dass die Datenverbindung aktiviert ist.
Stellen Sie sicher, dass Sie den richtigen Pfad haben (z. B. wenn Sie WLAN einschalten, das über den Server, auf dem Sie die WebAPI laufen, also nicht die vollständige Adresse, sondern die Adresse eines lokalen Servers).
Hier ist ein einfacher Code, der in meinem Fall läuft (von Simple aus und dann weiter)
using (WebClient webClient = new WebClient())
{
webClient.Encoding = System.Text.Encoding.UTF8;
string result = webClient.DownloadString(new Uri("https://webapi.domain.cz/api/root"));
}
ich habe dieses Problem gelöst, indem ich die IP-Adresse nicht mit localhost verwende
Ändern Sie Ihre Hosts-Datei und fügen Sie einen neuen Hostnamen in 127.0.0.1 hinzu
127.0.0.1 mylocalmachine #this name can be any you want
Jetzt können Sie mit dieser URL anfordern
client.BaseAddress = new Uri("http://mylocalmachine:49836");
Dies geschieht, weil localhost sich im Kontext Ihres Emulators befindet, also localhost des Telefons anruft.
Anstelle des Hostnamens können Sie die Ziele von Culy Ch erfüllen.
Wenn Ihr Web Service von IIS gehostet wird, müssen Sie einige zusätzliche Einstellungen vornehmen, um Anforderungen von externen Geräten oder Servern annehmen zu können. (iOS-Simulator, separates Projekt auf einem anderen Entwickler-Computer usw.)
Befolgen Sie dazu die Vorschläge in dieser Stack Overflow-Antwort: Wie kann eine externe Anforderung in IIS Express aktiviert werden?