跳过X帧

时间:2018-10-02 14:10:03

标签: c# api http xamarin

我正在用Xamarin编写应用程序,并且试图调用API。我使用一个名为GetString的GET函数创建了一个非常简单的API。我在Postman中测试了端点,并收到了一个字符串(因此,我认为API正常工作)。现在,我很难在Xamarin应用程序中获取数据。在调试过程中,当我调用await client.GetStringAsync("GetString")之类的api时,该应用程序似乎没有执行任何操作。

我在控制台中看到一条类似于以下内容的消息:

Skipped 374 frames! The application may be doing too much work on its main thread.

我正在Android模拟器中使用魔术IP(10.0.2.2)。

这是我试图用来在Xamarin中进行API调用的代码:

在ViewModel中:

public async Task GetString()
{

        var baseAddr = new Uri("http://10.0.2.2:58899/");
        HttpClient client = new HttpClient { BaseAddress = baseAddr };
        client.MaxResponseContentBufferSize = 256000;
        var returnedJson = await client.GetStringAsync("GetString");

}

服务器上的API控制器:

   public class ContactController : ApiController
    {

        [Route("GetString")]
        public String GetString()
        {
            return "asd"
        }
    }

非常感谢!

1 个答案:

答案 0 :(得分:0)

使用发现的here(可通过nuget安装)的Flurl库,您可以创建一个spring.security.user.password类,然后从按钮事件处理程序或视图模型中的命令调用ApiService方法

GetStringAsync

下面是一个示例,展示了如何在https://www.ipify.org/处调用公共API。

using System.Threading.Tasks;
using Flurl.Http;

namespace MyApp.Services {

    public class ApiService {
        public static async Task<string> GetStringAsync() {
           return await "https://api.com".GetJsonAsync<string>();
        }

    }
}

// In your code behind 
async void CallApi_Tapped( object sender, EventArgs e ) {
    var returnedString = await ApiService.GetStringAsync();
}

// Or in a view model via a command
Command _doGetString;
public Command DoGetString => _doGetString ?? ( _doGetString = new Command( async () => {
    var returnedString = await ApiService.GetStringAsync();
} ) );

这是显示呼叫完成的屏幕截图。

enter image description here