xamarin 表单中的 Web API 请求错误

Posted

技术标签:

【中文标题】xamarin 表单中的 Web API 请求错误【英文标题】:Web API request error in xamarin forms 【发布时间】:2018-10-15 00:02:33 【问题描述】:

我正在尝试使用 asp.net web api 和 xamarin 表单开发移动应用程序。遇到这样的错误

System.Net.Http.HttpRequestException:发送时出错 请求

我在同一个解决方案中开发了所有应用程序 Mobile、Web。然后使用 Visual Studio 2017 创建具有个人登录的 Web api。 这是我的RegisterBinding模型源代码

RegisterBinding.cs

public class RegisterBindingModel

    public string Email  get; set; 

    public string Password  get; set; 

    public string ConfirmPassword  get; set; 

然后我为 xamarin 绑定创建了视图模型 RegisterViewModel.cs

    class RegisterViewModel
    
    ApiServices _apiserv = new ApiServices(); 
    public string Email  get; set; 
    public string Password  get; set; 
    public string ConfirmPassword  get; set; 
    public string Message  get; set; 

    public ICommand RegisterCommand 
        get
        
            return new Command(async() =>
            
                var isSucess = await _apiserv.RegisterAsync(Email, Password, ConfirmPassword);
                if (isSucess)
                
                    Message = "Sucessfully Registered!";
                
                else
                
                    Message = "Try again";
                
            );
        
    

我还创建了 apiservice 来连接移动应用程序和 web api 服务

ApiService.cs

public async Task<bool> RegisterAsync(string email, string password, string confirmPassword)
        
            try
            
                var client = new HttpClient();

                var model = new RegisterBindingModel
                
                    Email = email,
                    Password = password,
                    ConfirmPassword = confirmPassword
                ;

                var json = JsonConvert.SerializeObject(model);

                HttpContent _content = new StringContent(json);

                _content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");


                var response = await client.PostAsync("http://localhost:54996/api/Account/Register", _content);
                return response.IsSuccessStatusCode;

            
            catch (System.Exception)
            

                throw;
            


        

最后我对 xamarin xaml 的看法是

RegisterPage.cs

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="CIDSCONMOB.Views.RegisterPage"
            xmlns:vm="clr-namespace:CIDSCONMOB.ViewModels">

    <ContentPage.BindingContext>
        <vm:RegisterViewModel/>
    </ContentPage.BindingContext>

    <StackLayout Orientation="Vertical">
        <Entry Text="Binding Email"
               Placeholder="Email"/>
        <Entry Text="Binding Password"
               Placeholder="Password"
               IsPassword="True"/>
        <Entry Text="Binding ConfirmPassword"
               Placeholder="Confirm Password"
               IsPassword="True"/>
        <Button Command="Binding RegisterCommand"
                 Text="Sign Up"/>
        <Label Text="Binding Message"/>
    </StackLayout>

</ContentPage>  

这是我点击注册按钮时的错误

HTTP Exception

由于我是 xamarin 开发的新手,请帮助我找到解决此问题的方法

【问题讨论】:

一个。不要使用本地主机,b。查看 InnerException 以获得实际的根本原因 System.ObjectDisposedException:无法访问已处置的对象。对象名称:“System.Net.Sockets.NetworkStream”。将 localhost 更改为 ipaddress 后 【参考方案1】:

问题很可能出在您使用的地址http://localhost:54996/api/Account/Register。在模拟器或实际设备上运行时,将其视为外部机器。因此,localhost 将指向该模拟器/设备。

检索运行服务器应用程序的机器的地址,确保它与您的模拟器/设备连接到同一网络,输入地址并重试。

地址很可能以192.168.x.x10.x.x.x 开头。

另外,InnerException 中可能有更多细节,最好先检查一下。

【讨论】:

但是这些家伙如何获得输出youtube.com/watch?v=t0v4srA4NhA 以及如何检查内部异常 因为他正在运行 UWP 应用程序,该应用程序与他的服务器应用程序在同一设备上运行 好的,我可以通过 ipconfig 命令使用我自己系统的 ipaddress 应该是那个。并确保允许通过您的防火墙进行连接。 现在它抛出此异常:System.ObjectDisposedException:无法访问已处置的对象对象名称:'System.Net.Sockets.NetworkStream'。系统ip地址为192.168.0.104,手机ip为192.168.232.2

以上是关于xamarin 表单中的 Web API 请求错误的主要内容,如果未能解决你的问题,请参考以下文章

在一个地方处理 xamarin 表单中 api 请求的异常

在xamarin表单中处理api请求的一个地方处理异常

Xamarin 中的 WebException,使用 HttpClient

Xamarin中的WebException,使用HttpClient

Xamarin 表单 HttpClient GetAsync

Xamarin 表单 http 异步请求