如何编写通用代码以对Rest服务进行异步调用

时间:2017-03-22 10:44:35

标签: c#-4.0 xamarin c#-3.0

我正在创建一个Xamarin应用程序,我必须在移动设备上将主数据填充到sqlite数据库中。

我是OOPS和Xamarin的新手

我有多个请求要从WebApi获取数据。我需要做的请求是50多个获取信息的电话。

现在,我需要编写异步通用代码来实现这一目标。

例如:我必须为EmployeeMaster,Company Master等填充数据。

我的通用代码应该能够识别要调用的URL以及必须返回的对象。我的正常代码如下所示

唯一不同的数据是RestUrl和TodoItem

    public async Task<List<TodoItem>> RefreshDataAsync()
    {
        Items = new List<TodoItem>();

        RestUrl = http://developer.xamarin.com:8081/api/todoitems{0}
        var uri = new Uri(string.Format(Constants.RestUrl, string.Empty));

        try
        {
            var response = await client.GetAsync(uri);
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Items = JsonConvert.DeserializeObject<List<TodoItem>>(content);
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(@"              ERROR {0}", ex.Message);
        }

        return Items;
    }

1 个答案:

答案 0 :(得分:0)

你应该看看泛型。 这样的事情可能对你有帮助。

public async Task<List<T>> RefreshDataAsync(string url)
{
    var items = new List<T>();

    try
    {
        var response = await client.GetAsync(url);
        if (response.IsSuccessStatusCode)
        {
            var content = await response.Content.ReadAsStringAsync();
            items = JsonConvert.DeserializeObject<List<T>>(content);
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(@"              ERROR {0}", ex.Message);
    }

    return items;
}

我也会删除List类型,只使用T,因此该方法可以加载列表和单个项目。

public async Task<T> RefreshDataAsync(string url)
{
    try
    {
        var response = await client.GetAsync(url);
        if (response.IsSuccessStatusCode)
        {
            var content = await response.Content.ReadAsStringAsync();
           return JsonConvert.DeserializeObject<T>(content);
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(@"              ERROR {0}", ex.Message);
    }

    return new T;
}