如何使用Xamarin.Forms
创建登录页面?
我在Android设备上调试和 在页面上,我尝试从MSSQL中的MSSQL数据库查询给定的用户名和密码
如果登录成功,页面将导航到新页面,否则将显示身份验证失败。
如何在Xamarin.Forms中执行此操作?
答案 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
此示例演示如何操作导航堆栈,以便在用户成功登录后仅显示应用程序的主页面。
有关该示例的详细信息,请参阅分层导航。
答案 1 :(得分:3)
您需要的是以下功能:
Web API(用于登录的Web服务 - 托管在Internet或本地网络上 - 与MSSql Server连接)
Xamarin.Forms应用程序中的登录屏幕(您可以自己设计或使用上述演示)
在登录屏幕上登录'按钮单击,您需要从Xamarin.Forms应用程序调用登录Web服务。
这需要联网(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;命令。