【问题标题】:Xamarin form : Token authentication with xamarin form web apiXamarin 表单:使用 xamarin 表单 web api 进行令牌身份验证
【发布时间】:2018-08-09 13:11:09
【问题描述】:

我正在为 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;



}

当我使用用户名和密码登录时出现此错误

Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0

如果我在邮递员中运行,它的工作正常,例如,如果我在邮递员中使用 username="test",password="test",grant-type="password" 运行这个http://softsol.com.pk/Token,我会得到令牌及其工作但我从 xamarin 表单中得到错误。我被困在这里

【问题讨论】:

    标签: xamarin.forms asp.net-web-api2 access-token


    【解决方案1】:

    我在http://softsol.com.pk/Help 访问了您后端的API 部分,发现http://softsol.com.pk/Token 不存在。 此外,在 Postman 上进行测试会返回 JSON 响应:

    {
        "error": "unsupported_grant_type"
    } 
    

    使用邮递员,我以 JSON 格式发送请求:

    {"username":"test","password":"test","grant-type":"password"}
    

    并作为 x-www-form-urlencoded :

    我建议您必须正确调试并分析豁免信息。

    【讨论】:

      【解决方案2】:
       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");
      

      }

      【讨论】:

      • 请解释您的代码的作用以及它如何解决问题
      • 它将位置和令牌和动作发送到服务器,如果它正确的信息,服务器会将您需要的信息发送到应用程序,当您发送正确的用户名和密码时就像一个简单的登录,服务器会让你登录到应用程序
      猜你喜欢
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 2018-07-30
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多