简体   繁体   English

将Android Volley与ASP .NET Web API结合使用

[英]Using Android Volley with ASP .NET Web API

I am trying to retrieve a resource from my asp .net restful service from an android client. 我正在尝试从android客户端从我的asp .net restful服务检索资源。 I have a MessagesController which has the method GetMessages: 我有一个MessagesController具有方法GetMessages:

[Authorize]
public IQueryable<Message> GetMessages()
{
    return db.Messages;
}

To access this I have sent a request to /token and have obtained a key which I use from the client application to access the resource. 要访问此资源,我向/token发送了一个请求,并获得了一个密钥,我可以从客户端应用程序使用该密钥来访问资源。 The trouble I have is that the client is receiving a 302 http error when trying to access the resource. 我遇到的麻烦是,客户端在尝试访问资源时收到302 http错误。

This is the method in the android client: 这是android客户端中的方法:

public void setAllSendersAndAllMessages()
{
    String url = "Messages/GetMessages";
    showpDialog();
    String Url = baseUrl + url;


    JsonArrayRequest req = new JsonArrayRequest(Url,
            new Response.Listener<JSONArray>() {

                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());

                    try {

                        allSenders = new String[response.length()];
                        allMessages = new String[response.length()];
                        for (int i = 0; i < response.length(); i++) {

                            JSONObject message = (JSONObject) response.get(i);

                            allSenders[i] = message.getString("sender");
                            allMessages[i] = message.getString("messageContent");
                        }
                        setInitialViews();

                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(context, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                    }

                    hidepDialog();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            Toast.makeText(context,error.getMessage(), Toast.LENGTH_SHORT).show();
            hidepDialog();
        }
    }){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String>  headers = new HashMap<>();
            headers.put("Authorization", "bearer "+ token);
            return headers;
        }
    };

    mRequestQueue.add(req);

}

I am overriding the getHeaders() method to send the authorization token to the service. 我重写了getHeaders()方法以将授权令牌发送到服务。 This key and header works perfectly when using 'Postman' but fails in the android client for some unknown reason. 此键和标头在使用“邮递员”时可完美工作,但由于某些未知原因在android客户端中失败。 If anyone can offer some advice it would be greatly appreciated! 如果有人可以提供一些建议,将不胜感激!

HTTP 302 is URL error, URL must be like : http://server/WepApi/api/orders HTTP 302是URL错误,URL必须类似于: http:// server / WepApi / api / orders

Server : Your IIS server Name , or Your server IP address 服务器:您的IIS服务器名称或服务器IP地址

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM