我试图使用我在.NET Framework中内置的,使用令牌身份验证系统的Web API。这些API正在使用Volley在Android中使用。
因此这些API在邮递员中进行测试时可以完美地工作,因此,我将按照我在Android中使用的代码共享邮递员配置的屏幕截图。
public static void authorizeAPIClient(final String username, final String password, RequestQueue requestQueue){
StringRequest stringRequest = new StringRequest(Request.Method.POST,
apiPath + "api/authorise/token",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
MainActivity.getToken(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded; charset=UTF-8";
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("grant_type", "password");
params.put("username", username);
params.put("password", password);
return params;
}
};
requestQueue.add(stringRequest);
}
因此,这部分工作正常,我能够从JSON中提取令牌,甚至可以使用邮递员测试在Android设备上接收到的令牌,并且工作原理非常完美。我发现这很奇怪,是因为我使用getParams()
来传递用户名和密码,而在邮递员中,我需要通过表格来完成它。
现在我们已经从服务器获取了令牌并确定它可以正常工作,我尝试调用另一个需要令牌的函数。
public static void getUserDetails(final String userId, final String token, RequestQueue requestQueue){
StringRequest stringRequest = new StringRequest(Request.Method.GET,
apiPath + "API/points/getUserDetails",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("API", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("API", error.toString());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("UserId", userId);
return params;
}
@Override
public Map<String, String> getHeaders(){
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "Bearer " + token);
return params;
}
};
requestQueue.add(stringRequest);
调用此函数时,根据传递参数和标头的方式,会出现以下错误之一:
com.android.volley.ServerError
com.android.volley.AuthFailureError
我不确定首先出现哪个错误,即它是否可以在AuthFailureError
之前或之后引发服务器错误,因此很难确定它是否已授权或URL参数是否正确传递。
有人知道我在做什么错吗,我一直在通过StackOverFlow进行搜索,但没有任何结果对我有用。
此外,对所有黑底黑字,敏感信息表示抱歉:D
答案 0 :(得分:1)
尝试一下
public static void getUserDetails(final String userId, final String token, RequestQueue requestQueue){
StringRequest stringRequest = new StringRequest(Request.Method.GET,
apiPath + "API/points/getUserDetails?UserId=" + userId,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("API", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("API", error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError{
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "Bearer " + token);
return params;
}
};
requestQueue.add(stringRequest);