Xamarin.forms Xamarin表单:使用Xamarin表单web api进行令牌身份验证

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

我正在为xamarin表单使用基于令牌的身份验证。这是我的代码

 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”);

}

请解释您的代码的作用以及它如何解决问题。它将位置、令牌和操作发送到服务器,如果信息正确,服务器将向应用程序发送您需要的信息,这就像简单的登录。当您发送正确的用户名和密码时,服务器将允许您登录应用程序