Xamarin.forms Xamarin表单:使用Xamarin表单web api进行令牌身份验证
我正在为xamarin表单使用基于令牌的身份验证。这是我的代码Xamarin.forms Xamarin表单:使用Xamarin表单web api进行令牌身份验证,xamarin.forms,asp.net-web-api2,access-token,Xamarin.forms,Asp.net Web Api2,Access Token,我正在为xamarin表单使用基于令牌的身份验证。这是我的代码 public async Task<string> checkLogin(string username, string password) { var keyValues = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("usern
public async Task<string> checkLogin(string username, string password)
{
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("username",username),
new KeyValuePair<string, string>("password",password),
new KeyValuePair<string, string>("grant_type","password")
};
var request = new HttpRequestMessage(HttpMethod.Post, "http://softsol.com.pk/Token");
request.Content = new FormUrlEncodedContent(keyValues);
var client = new HttpClient();
var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();
JObject jdynamic = JsonConvert.DeserializeObject<dynamic>(content);
var accessToken = jdynamic.Value<string>("access_token");
var refershToken = jdynamic.Value<string>("refresh_token");
var date = DateTime.Now.ToString();
var accessTokenExpiration= jdynamic.Value< DateTime> (".expires");
//await Application.Current.MainPage.DisplayAlert("Alert", content, "OK");
Debug.WriteLine(content);
Settings.AccessToken=accessToken;
Settings.RefreshToken = refershToken;
Settings.AccessTokenexpiration = accessTokenExpiration;
return accessToken;
//return response.IsSuccessStatusCode;
}
公共异步任务检查登录(字符串用户名、字符串密码)
{
var keyValues=新列表
{
新的KeyValuePair(“用户名”,用户名),
新的KeyValuePair(“密码”,password),
新的KeyValuePair(“授权类型”、“密码”)
};
var request=new-HttpRequestMessage(HttpMethod.Post)http://softsol.com.pk/Token");
request.Content=newformurlencodedcontent(keyValues);
var client=新的HttpClient();
var response=wait client.sendaync(请求);
var content=await response.content.ReadAsStringAsync();
JObject jdynamic=JsonConvert.DeserializeObject(内容);
var accessToken=jdynamic.Value(“访问令牌”);
var refreshtoken=jdynamic.Value(“刷新令牌”);
var date=DateTime.Now.ToString();
var accessTokenExpiration=jdynamic.Value(“.expires”);
//等待应用程序.Current.MainPage.DisplayAlert(“警报”,内容,“确定”);
Debug.WriteLine(内容);
Settings.AccessToken=AccessToken;
Settings.RefreshToken=RefreshToken;
Settings.AccessTokenexpiration=AccessTokenexpiration;
返回accessToken;
//返回response.IsSuccessStatusCode;
}
当我使用usernamre和密码登录时,我得到了这个错误
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0
Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:我访问了位于的后端的API部分,发现没有。
此外,在Postman上测试会返回JSON响应:
{
"error": "unsupported_grant_type"
}
使用postman,我发送了JSON格式的请求:
{"username":"test","password":"test","grant-type":"password"}
作为x-www-form-urlencoded:
我建议您必须正确调试并分析豁免信息 public异步void GetInfoLogin()
public async void GetInfoLogin()
{
IEnumerable<KeyValuePair<string, string>> member = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("username", UserName.Text),
new KeyValuePair<string, string>("password", PassWord.Text),
new KeyValuePair<string, string>("action", "get_user")
};
HttpContent content = new FormUrlEncodedContent(member);
HttpClient client = new HttpCLient();
var response = await client.PostAsync("(endpoint to server)",content);
var result = await response.Content.ReadAsStringAsync();
var TReturn = (JObject)JsonConvert.DeserializeObject(result);
var success = TReturn.Value<string>("success");
var error = TReturn.Value<string>("error");
var user_id = TReturn.Value<string>("user_id");
var full_name = TReturn.Value<string>("full_name");
var time = TReturn.Value<int>("time");
var send = TReturn.Value<string>("send");
{
IEnumerable成员=新列表()
{
新的KeyValuePair(“用户名”,username.Text),
新的KeyValuePair(“密码”,password.Text),
新的KeyValuePair(“操作”、“获取用户”)
};
HttpContent=新FormUrlEncodedContent(成员);
HttpClient=新的HttpClient();
var response=wait client.PostAsync(“(端点到服务器)”,content);
var result=await response.Content.ReadAsStringAsync();
var TReturn=(JObject)JsonConvert.DeserializeObject(结果);
var success=TReturn.Value(“success”);
var error=TReturn.Value(“错误”);
var user_id=TReturn.Value(“user_id”);
var full_name=TReturn.Value(“full_name”);
var时间=t回报值(“时间”);
var send=TReturn.Value(“send”);
}请解释您的代码的作用以及它如何解决问题。它将位置、令牌和操作发送到服务器,如果信息正确,服务器将向应用程序发送您需要的信息,这就像简单的登录。当您发送正确的用户名和密码时,服务器将允许您登录应用程序