c# – 使用MvxJsonRequest的MvxRestClient.MakeRequestAsync的工作示例

我刚刚开始在一个多平台项目的核心库中使用Mvvmcross.

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

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

提前致谢

最佳答案 似乎在Mvvmcross(Mvx)4.1.4的所有版本中存在回归错误,并且直到当前最新稳定的4.2.2.在接口IMvxJsonRestClient和IMvxRestClient中缺少
readme中描述的回调方法的情况.该问题已在当前的
master branch(提交:
a5561b
fb2feb7)中得到解决,因此很有可能在下一版本中修复.

如果要使用MvvmCross.Plugins.Json反序列化JSON响应,则使用MvxJsonRestClient而不是标准MvxRestClient.

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

方法 – 回调

在使用早于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; }
 }
点赞