Ich habe ein Problem beim Aufruf der API-Anwendung, die ich in einem anderen Projekt ausgeführt habe. Wenn ich debugge, kann ich sehen, dass der Anruf den richtigen Controller in der API trifft. Nachdem ich auf "Weiter" geklickt habe, hängt es einfach und nichts passiert.client.GetAsync Anruf hängt beim Aufruf der API von wpf
Methode, wo ich den Anruf an die Api machen
public async Task<ObservableCollection<Room>> SearchForAvailableRooms(DateTime from, DateTime to, bool smoke, bool minibar, int rooms, int customers)
{
ObservableCollection<Room> data = new ObservableCollection<Room>();
// Call api to get rooms
var client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:15998/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// New code:
HttpResponseMessage response = await client.GetAsync("api/room");
if (response.IsSuccessStatusCode)
{
var jsonAsString = await response.Content.ReadAsStringAsync();
}
else
{
throw new ApplicationException(string.Format("Response message is not OK. Issues in action: {0}", "api/room"));
}
return null;
}
Die client.GetAsync ("api/Raum") macht den Anruf an die api, aber nach dosen't es weiter zu erhalten. Die Wenn oder sonst werden nicht geworfen.
habe gelesen, dass der Aufruf der Methode von diesem Stapel Post ein Deadlock (hanging) wird verursacht: Link to the post, etwas zu tun, wo ich den Aufruf der Methode machen
Er erklärt hat. Im Moment benutze ich diese Zeilen die Methode aufzurufen:
var task = _getRoomsService.SearchForAvailableRooms(searchModel.From, searchModel.To, searchModel.Smoke, searchModel.Minibar, searchModel.RoomValue, searchModel.CustomerValue);
var result = task.GetAwaiter().GetResult();
RoomsList = result;
Kann jeder sehen, was hier falsch sein könnte?
Update:
Was ich habe auch versucht:
RoomsList = await _getRoomsService.SearchForAvailableRooms(searchModel.From, searchModel.To, searchModel.Smoke, searchModel.Minibar, searchModel.RoomValue, searchModel.CustomerValue);
Das gibt mir einen Fehler -> Await Operator kann nur innerhalb von Asynchron-Methode verwendet werden.
dies versucht hat, es mir sagt, dass Betreiber erwarten kann nur innerhalb von Asynchron-Methode verwendet werden, aber Komische dass meine Methode eine asynchrone Methode ist? – Mikkel
Sie müssen die Methode als async markieren. Angenommen, Sie tun dies in Button-Klick-Handler, dann tun Sie einfach "async void OnButtonClick (Objekt Absender, RoutedEventArgs e)" – Evk
Okay, ich versuche es! abwarten! – Mikkel