从Xamarin注册用户到ASP.NET Identity

时间:2018-03-30 16:43:52

标签: asp.net xamarin asp.net-web-api xamarin.forms

我整天都陷入了将用户注册到我的应用程序的愚蠢问题。

点击“注册”按钮后,这是我的代码:

public ICommand RegisterCommand
        {
            get
            {
                return new Command(async() =>
                {
                    var isSuccess = await _apiServices.RegisterAsync(Email, Password, ConfirmPassword);

                    if (isSuccess){
                        Message = "Registered Successfully";
                    }
                    else
                    {
                        Message = "Retry later";
                    }
                });
            }
        }

Api服务注册异步方法:

 public async Task<bool> RegisterAsync(string email, string password, string confirmPassword)
    {
        try
        {
            System.Diagnostics.Debug.WriteLine("Email: "+email);
            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 MediaTypeHeaderValue("application/json");
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var response = await client.PostAsync("http://localhost:63724/api/Account/Register", content);

            if (response.IsSuccessStatusCode)
            {
                return true;
            }

            return false;

        }
        catch (Exception e)
        {
            System.Diagnostics.Debug.WriteLine("Error: "+e);
            throw;
        }
    }
}

我得到的错误是:

System.Net.Http.HttpRequestException: An error occurred while sending the request ---> System.Net.WebException: Error: ConnectFailure (Connection refused) ---> System.Net.Sockets.SocketException: Connection refused
  at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP) [0x000b6] in <6c708cf596db438ebfc6b7e012659eee>:0 
  at System.Net.WebConnection.Connect (System.Net.HttpWebRequest request) [0x0016d] in <6c708cf596db438ebfc6b7e012659eee>:0 
   --- End of inner exception stack trace ---

对我来说,这非常令人沮丧,因为我可以使用Postman注册一个使用完全相同的localhost地址的用法。我正在关注Houssem Dellai的Xamarin.Forms mvc web api教程,可以找到here

1 个答案:

答案 0 :(得分:1)

我在开发应用时遇到了httpclient的问题。我相信httpclient类的跨平台实现存在问题。 iOS不知道如何处理它。

相反,我实现了一个非常简单的名为flurl的httpclient库:http://tmenier.github.io/Flurl/

首先,您需要在所有项目目录(iOS,Android和PCL)中安装flurl,然后实现非常简单。

using Flurl;
using Flurl.Http;

public async Task<User> CreateUserAsync(RegisterUserModel userModel)
    {
        string url = "your/backend/here";
        //resp is a user object received and automatically converted into a c# object through the use of .ReceiveJson<typeofobject>();
        var resp = await (url).PostJsonAsync(userModel)
                                       .ReceiveJson<User>();
        if (resp.LoginSession != null)
        {
            //Raise my registered event to let other classes know to proceed
            OnUserRegistered(resp);
        }
        return resp;
    }

正如您所看到的,它使httpclient实现变得非常简单。希望这会有所帮助。