使用MvxJsonRequest的MvxRestClient.MakeRequestAsync的工作示例

时间:2016-08-05 08:33:47

标签: c# json networking mvvmcross

我刚开始在核心库中使用$ tree -L 1 / / ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib ├── lost+found ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/bin ├── srv ├── sys ├── tmp ├── usr └── var 处理多平台项目。

我想将Mvvmcross插件与Mvvmcross.Network插件一起使用,但我无法找到合并这两个插件的好例子。我观看了所有N + 1个视频,我猜这些视频在上传的时候没有实现。

理想情况下,我想知道如何使用json请求和json响应发出异步请求。

提前致谢

1 个答案:

答案 0 :(得分:2)

似乎在Mvvmcross(Mvx)4.1.4的所有版本中存在回归错误,并且最新的稳定版本为4.2.2。接口IMvxJsonRestClientIMvxRestClient中缺少readme中描述的回调方法的地方。该问题已在当前master branch(提交:a5561bfb2feb7)中得到解决,因此很有可能会在下一个版本中修复此问题。

如果您想使用MvvmCross.Plugins.Json反序列化您的JSON响应,请使用标准MvxJsonRestClient上的用户MvxRestClient

以下是MvxJsonRestClient使用JSONPlaceholder API的示例:

方法 - 回调

使用早于4.1.4的Mvx版本时,您可以使用回调方法,最有可能在4.2.2之后的版本中使用回调方法。

public void PostSample()
{
    var request = new MvxJsonRestRequest<UserRequest>
        ("http://jsonplaceholder.typicode.com/posts")
    {
        Body = new UserRequest
        {
            Title = "foo",
            Body = "bar",
            UserId = 1
        }
    };

    var client = Mvx.Resolve<IMvxJsonRestClient>();
    client.MakeRequestFor(request,
        (MvxDecodedRestResponse<UserResponse> response) =>
        {
            // do something with the response.StatusCode and response.Result
        },
        error =>
        {
            // do something with the error
        });
}

方法 - 异步

使用Mvx版本4.1.4及更高版本时,可以使用Async方法。

public async Task PostSampleAsync()
{
    var request = new MvxJsonRestRequest<UserRequest>
        ("http://jsonplaceholder.typicode.com/posts")
    {
        Body = new UserRequest
        {
            Title = "foo",
            Body = "bar",
            UserId = 1
        }
    };

    var client = Mvx.Resolve<IMvxJsonRestClient>();
    var response = await client.MakeRequestForAsync<UserResponse>(request);

    // Check response.StatusCode if matches your expected status code
    if (response.StatusCode == System.Net.HttpStatusCode.Created)
    {
        // interrogate the response object
        UserResponse user = response.Result;
    }
    else
    {
        // do something in the case of error/time-out/unexpected response code
    }
}

请求和响应类

public class UserRequest
{
     public string Title { get; set; }
     public string Body { get; set; }
     public int UserId { get; set; }
}

public class UserResponse
{
     public string Title { get; set; }
     public string Body { get; set; }
     public int UserId { get; set; }
     public int Id { get; set; }
 }