我正在用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"
}
}
非常感谢!
答案 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();
} ) );
这是显示呼叫完成的屏幕截图。