繁体   English   中英

Xamarin PCL项目中的HttpClient访问失败

[英]HttpClient Access failing in Xamarin PCL Project

我的Xamarin PCL项目中有此代码块。 但是,在打算调用GetStringAsync方法的第4行上,代码此时退出该方法,并且不返回任何响应。 我无法从Web服务获取json数据,并且尝试了几种解决方法,但均未成功。 我正在使用Visual Studio 2015。

  //this calls the webservice
  public class RestClient<T>
   {
    private const string WebServiceUrl = "http://localhost:14241/api/Employees/";

    public async Task<List<T>> GetAsync()
    {
        var httpClient = new HttpClient();

        var json = await httpClient.GetStringAsync(WebServiceUrl);

        var taskModels = JsonConvert.DeserializeObject<List<T>>(json);

        return taskModels;
    }

    public async Task<bool> PostAsync(T t)
    {
        var httpClient = new HttpClient();

        var json = JsonConvert.SerializeObject(t);

        HttpContent httpContent = new StringContent(json);

        httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var result = await httpClient.PostAsync(WebServiceUrl, httpContent);

        return result.IsSuccessStatusCode;
    }

    public async Task<bool> PutAsync(int id, T t)
    {
        var httpClient = new HttpClient();

        var json = JsonConvert.SerializeObject(t);

        HttpContent httpContent = new StringContent(json);

        httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var result = await httpClient.PutAsync(WebServiceUrl + id, httpContent);

        return result.IsSuccessStatusCode;
    }

    public async Task<bool> DeleteAsync(int id, T t)
    {
        var httpClient = new HttpClient();

        var response = await httpClient.DeleteAsync(WebServiceUrl + id);

        return response.IsSuccessStatusCode;
    }
}


//this is the main view model that binds to the XAML page
public class MainViewModel : INotifyPropertyChanged
{
    private List<Employee> _employeeList;
    public List<Employee> EmployeesList
    {
        get { return _employeeList; }
        set
        {
            _employeeList = value;
            OnPropertyChanged();
        }
    }

    public MainViewModel()
    {
        InitializeDataAsync();
    }

    private async Task InitializeDataAsync()
    {
        var employeeServices = new EmployeesServices();

        EmployeesList = await employeeServices.GetEmployeesAsync();
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName=null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

}



    //method that calls the GetAsync() method to retrieve the employee list       
    //from the web service
    public class EmployeesServices
    {
    public async Task<List<Employee>> GetEmployeesAsync()
    {
        RestClient<Employee> restClient = new RestClient<Employee>();

        var employeesList = await restClient.GetAsync();

        return employeesList;
    }
}

请确保您使用await在整个呼叫链一路下跌至GetAsync()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM