【问题标题】:Can't call a web api service from Xamarin forms?无法从 Xamarin 表单调用 Web api 服务?
【发布时间】:2017-10-31 06:59:32
【问题描述】:

我有这个 web api 服务:

 [HttpPost]
 public bool Post(UserModel newUser)
 {
    return regRepo.AddUser(newUser);
 }

我想从 Xamarin.Forms 项目中调用它,所以我做了这个:

   private void AddUser(object obj)
    {
        var user = obj as UserModel;
        var url = @"http://localhost:57615/api/UsersApi/";
        var uri = new Uri(url);
        var client = new HttpClient();
        var json =  JsonConvert.SerializeObject(user);
        var content = new StringContent(json, Encoding.UTF8, "application/json");

        var response = client.PostAsync(uri, content);
     }

但它从不调用服务,我使用 Postman 来确保 URL 正确,并且可以正常工作

编辑

我按照 klm_ 的建议将方法签名更改为 async,但出现此错误:

应用程序处于中断模式

【问题讨论】:

  • 在客户端如何以及在何处调用AddUser
  • 如果您在 android 中遇到此问题,请检查您是否已在 AndroidManifest 中授予 Internet 权限
  • 我检查了互联网权限,但仍然无法正常工作。不过,同样的代码在控制台应用程序中工作!
  • 如果使用这一行 var response = await client.PostAsync(uri, content) application break 那么你也可以尝试将 HttpClient Implementation 更改为 AndroidClientHandler。您可以从 android 项目属性中执行此操作。
  • 不要使用本地主机,使用你服务器的IP

标签: c# rest xamarin.forms visual-studio-2017 dotnet-httpclient


【解决方案1】:

试试这个(添加 asyncawait

private async void AddUser(object obj)
{
    var user = obj as UserModel;
    var url = @"http://localhost:57615/api/UsersApi/";
    var uri = new Uri(url);
    var client = new HttpClient();
    var json =  JsonConvert.SerializeObject(user);
    var content = new StringContent(json, Encoding.UTF8, "application/json");

    var response = await client.PostAsync(uri, content);
 }

【讨论】:

  • 没有详细信息
  • 您可以尝试的另一件事是删除“async/await”并将最后一行替换为 var response = client.PostAsync(uri, content).GetAwaiter().GetResult();
【解决方案2】:

确保obj 是您模型的正确实例。

 try
 {
    HttpClient client = new HttpClient();
    var model = obj as UserModel ;
    var url = @"http://localhost:57615/api/UsersApi/";
    var json = JsonConvert.SerializeObject(model);
    HttpContent content = new StringContent(json);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    var response = await client.PostAsync(url, content);
    var message = await response.Content.ReadAsStringAsync();
    return message;
 }
 catch (Exception x)
 {
 // message
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多