首页 文章

如何在Xamarin.Forms中创建登录页面?

提问于
浏览
1

如何使用 Xamarin.Forms 创建登录页面?

我在Android设备上调试
在页面上,我尝试从MSSQL中的MSSQL数据库查询给定的用户名和密码

如果登录成功,页面将导航到新页面,否则将显示身份验证失败 .

我怎么能在Xamarin.Forms中这样做?

4 回答

  • 2

    (Xamarin LoginFlow 在答案底部链接的示例)

    您将拥有多个Xamarin.Forms页面并使用 NavigationPage 从(生命周期)堆栈中推送或弹出它们 .

    参考:https://developer.xamarin.com/api/type/Xamarin.Forms.NavigationPage/

    想想每个 Page 一个完整的独立迷你应用程序 . 因此,Login页面可能会处理从用户交互获取UserID / Password,通过服务器通过执行SQL查询的Rest api执行授权检查 . 如果登录成功,则会在 NavigationPage 堆栈上推送新的基于表单的页面 . 即

    SplashScreen - > LoginPage - > MainPagePage

    enter image description here

    LoginFlow Xamarin示例

    此示例演示了如何操作导航堆栈,以便在用户成功登录后仅显示应用程序的主页面 . 有关该示例的详细信息,请参阅分层导航 .

    enter image description here

  • 3

    您需要的是以下功能:

    • Web API(用于登录的Web服务 - 在Internet或本地网络上托管 - 与MSSql Server连接)

    • Xamarin.Forms应用程序中的登录屏幕(您可以自己设计或使用上述演示)

    • 在登录屏幕上单击“登录”按钮,您需要从Xamarin.Forms应用程序调用登录Web服务 .

    这需要网络(Android项目上的Internet权限,通过Manifest.xml) . 您可以使用Microsoft.Net.Http进行Web服务调用 . (看看这个例子http://www.c-sharpcorner.com/UploadFile/nirmal.hota/consuming-restful-web-service-in-xamarin-forms-project-using/

    如果您的服务器使用JSON进行响应并且您需要解析JSON,那么您可以使用Json.Net(Newtonsoft.Json) .

    Note :我想告诉您的是,您需要使用连接到数据库并托管在服务器上的Web服务 . 从Xamarin.Forms应用程序,您必须使用适当的参数调用此Web服务 . 这需要联网,因此您可以使用Microsoft.Net.Http(或者还有其他插件也可用) . 要从Web服务获得响应,如果它在Json中,那么您可以使用Newtonsoft.Json来解析Json .

  • 4

    有一个带登录页面的应用程序的完整示例:xamarin-forms-samples/LoginDemo/由Xamarin提供 .

  • 0

    所以假设你在asp.net web api上有一个LoginController(如果你不知道如何创建一个asp.net web api项目等等,这不是学习它的地方:))

    [RoutePrefix("v1/login")]
    public class LoginController : ApiController
    {
        [Route("")]
        [HttpPost] //I'm using post!!!!!! you may use get etc.
        public IHttpActionResult Login(UserLoginData request)
        {
            var userData = CheckFromDb(request);
    
            return Json(userData);
    
        }
    }
    

    它检查来自db的请求(UserLoginData是一个简单的类,让我们说保存用户名和密码),如果用户存在则返回另一个类(假设它是UserData hat持有姓名,姓氏,生日等) . 如果找不到登录,则可能返回null . 由你决定 .

    所以它将在您的主机上可用

    本地主机:34252 / V1 /登录

    (34252你的港口 - 可能会改变你)

    所以你必须从这样的设备(xamarin.forms)代码中调用它

    public string Post(string url, UserLoginData userLoginData)
    {   
    //url is login url as defined above and userLoginData holds your
    //user interface (textbox) data :)
    using (var client = new HttpClient())
    {
        client.Timeout = new TimeSpan(0, 0, 30); 
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
        StringContent content;
        content = new StringContent(JsonConvert.SerializeObject(userLoginData), Encoding.UTF8, "application/json");
    
        HttpResponseMessage response = client.PostAsync(url, content).Result;
        if (!response.IsSuccessStatusCode)
        {
            throw new Exception("call failed");
        }
     //this is your response as json
        var responseString = response.Content.ReadAsStringAsync().Result;
     //you can convert it and check to a specific class if you need
        var userData = JsonConvert.DeserializeObject<UserData>(responseString);
    }
    }
    

    因此,UserLoginData和UserData类都必须存在于双方 . 您可以使用Newtonsoft.Json库进行json解析(jsonconvert是它的方法) . 希望这对你有所帮助

    而Android设备模拟器网络有点棘手 . 您可能无法连接到localhost directy . 对于xamarin模拟器,它可能需要一个像10.0.2 . *的forroidemulator或10.71.34 . *的地址 . 请检查您的网卡上的IP地址,并通过“cmd.exe”和“ipconfig / all”命令找到正确的地址 .

相关问题