tôi kêu gọi một dịch vụ bên ngoài sử dụng HttpClient từ bên trong một ASP.Net MVC dự án Api 4 Web chạy trên .Net Framework 4.5Calling dịch vụ HTTP bên ngoài sử dụng HttpClient từ một hành động Web API
Mẫu mã được như sau (bỏ qua các giá trị trả lại vì đây là mẫu mã để kiểm tra gọi một dịch vụ bên ngoài):
public class ValuesController : ApiController
{
static string _address = "http://api.worldbank.org/countries?format=json";
private string result;
// GET api/values
public IEnumerable<string> Get()
{
GetResponse();
return new string[] { result, "value2" };
}
private async void GetResponse()
{
var client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(_address);
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsStringAsync();
}
}
Mặc dù mã trong phương pháp riêng nào thực sự làm việc vấn đề tôi có là Nhận Controller() gọi GetResponse() nhưng nó không phải chờ kết quả mà thay vào đó ngay lập tức thực hiện trả về với kết quả = null.
Tôi cũng đã cố gắng sử dụng một cuộc gọi đồng bộ đơn giản với một WebClient như sau:
// GET api/values
public IEnumerable<string> Get()
{
//GetResponse();
var client = new WebClient();
result = client.DownloadString(_address);
return new string[] { result, "value2" };
}
mà hoạt động tốt.
Tôi đang làm gì sai? Tại sao Get() không chờ kết thúc phương thức riêng tư trong mẫu async?
bạn không cần phải gọi GetResponse() cũng đang chờ đợi chưa? Nếu không, điều đó sẽ không chờ đợi cho phương thức đó kết thúc ... và hành động điều khiển của bạn sẽ kết thúc trực tiếp để lại kết quả vẫn là null. – jishi
Có nhưng tôi đã không nhận ra rằng tôi có thể đánh dấu Get() là async được yêu cầu để sử dụng chờ đợi. – Redeemed1