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

时间:2016-04-20 07:16:38

标签: xamarin xamarin.android xamarin.forms

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

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

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

如何在Xamarin.Forms中执行此操作?

4 个答案:

答案 0 :(得分:4)

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

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

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

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

SplashScreen - >登录页面 - > MainPagePage

enter image description here

LoginFlow Xamarin example

  

此示例演示如何操作导航堆栈,以便在用户成功登录后仅显示应用程序的主页面。

     

有关该示例的详细信息,请参阅分层导航。

enter image description here

答案 1 :(得分:3)

您需要的是以下功能:

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

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

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

  4. 这需要联网(Android项目的互联网权限,通过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)。

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

答案 2 :(得分:2)

有一个完整的登录页面示例:Xamarin提供的xamarin-forms-samples/LoginDemo/

答案 3 :(得分: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帽子持有名字,姓氏,生日等)。如果找不到登录,则可能返回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地址,并通过&#34; cmd.exe&#34;找到正确的地址。和&#34; ipconfig / all&#34;命令。