所以假设你在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);
}
}
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);
}
}
4 回答
(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
LoginFlow Xamarin示例
您需要的是以下功能:
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 .
有一个带登录页面的应用程序的完整示例:xamarin-forms-samples/LoginDemo/由Xamarin提供 .
所以假设你在asp.net web api上有一个LoginController(如果你不知道如何创建一个asp.net web api项目等等,这不是学习它的地方:))
它检查来自db的请求(UserLoginData是一个简单的类,让我们说保存用户名和密码),如果用户存在则返回另一个类(假设它是UserData hat持有姓名,姓氏,生日等) . 如果找不到登录,则可能返回null . 由你决定 .
所以它将在您的主机上可用
本地主机:34252 / V1 /登录
(34252你的港口 - 可能会改变你)
所以你必须从这样的设备(xamarin.forms)代码中调用它
因此,UserLoginData和UserData类都必须存在于双方 . 您可以使用Newtonsoft.Json库进行json解析(jsonconvert是它的方法) . 希望这对你有所帮助
而Android设备模拟器网络有点棘手 . 您可能无法连接到localhost directy . 对于xamarin模拟器,它可能需要一个像10.0.2 . *的forroidemulator或10.71.34 . *的地址 . 请检查您的网卡上的IP地址,并通过“cmd.exe”和“ipconfig / all”命令找到正确的地址 .