使用afnetworking在GET方法中传递url中的参数 [英] Passing parameter in url for GET method using afnetworking

查看:781
本文介绍了使用afnetworking在GET方法中传递url中的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有执行查询的网址。

https://<BASE_URL>/<TENANT_URL>/?query=where UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true

我在租户网址之后逃离剩下的部分,

i am escaping the remaining part after tenant url like this,

 NSString *requestUrl = [[NSString stringWithFormat:@"%@/?query=where UserName='%@'&companyId=&page=1&pageSize=25&filterResultByColumns=true",<TENANT_URL>,userCredential.userName]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    requestUrl = [NSString stringWithFormat:@"%@/%@",baseurl,requestUrl];

这是我的GET请求。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        AFHTTPResponseSerializer *serializer = [AFHTTPResponseSerializer serializer];

            serializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];


        manager.responseSerializer = serializer;
        manager.requestSerializer = [AFJSONRequestSerializer serializer];
    NSString *path = [NSString stringWithFormat:@"%@",URL];


    [manager GET:path parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
                    NSError* error = nil;
                    NSArray* json = [NSJSONSerialization
                                          JSONObjectWithData:responseObject

                                          options:kNilOptions 
                                          error:&error];
                    success(json);
                }
                     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                         failure(error);
                     }];

但我总是得到400 Bad请求错误。我认为问题在于query = where ..。但我不确定。我该如何解析URL。我在Chrome中使用POSTMAN进行了测试。它完美地运作。但是当我运行应用程序时它会引发错误。

But i always getting a 400 Bad request error. I think problem is with "query=where ..". But i am not sure. How can i parse the URL. I tested with "POSTMAN" in Chrome. It works perfectly. But it throws me an error when i run the app.

错误:

Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: bad request (400)" UserInfo=0xb7ac2b0 {NSErrorFailingURLKey=https://<BASE_URL>/<TENANT_URL>/?query=where UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true&url=https%3A%2F%2F<BASE_URL>%2F%2F<TENANT_URL>%2F%3F?query=where%2DUserName%3D%27abc%27%26companyId%3D%26page%3D1%26pageSize%3D25%26filterResultByColumns%3Dtrue, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xb7e6910> { URL: https://<BASE_URL>/<TENANT_URL>/?query=where UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true&url=https%3A%2F%2F<BASE_URL>%2F%2F<TENANT_URL>%2F%3F?query=where%2DUserName%3D%27abc%27%26companyId%3D%26page%3D1%26pageSize%3D25%26filterResultByColumns%3Dtrue } { status code: 400, headers {
    "Cache-Control" = private;
    "Content-Length" = 0;
    "Content-Type" = "text/html";
    Date = "Fri, 17 Jan 2014 05:29:56 GMT";
    Server = "Microsoft-HTTPAPI/2.0";
    "X-AspNet-Version" = "4.0.30319";
    "X-Powered-By" = "ASP.NET";
} }, NSLocalizedDescription=Request failed: bad request (400)}


推荐答案

看起来您正在构建的URL存在许多问题,以及您将参数传递(或不传递)到AFNetworking的方式。您不需要自己构建查询字符串,因为AFNetworking会为您执行此操作。正如我在上面的评论中所提到的,传递 query = where UserName ='abc'作为URL的一部分似乎是一个坏主意。但是,这里有一个简单的示例,说明如果您的网址略有不同,您将如何调用AFNetworking的 GET 方法:

It looks like there are a number of issues with the URL you're constructing, and the way you're passing (or not passing) parameters into AFNetworking. You don't need to construct your query string yourself, as AFNetworking will do that for you. As mentioned in my comment above, passing query=where UserName='abc' as part of a URL seems like a bad idea. However, here's a quick example of how you'd call AFNetworking's GET method if your URL was slightly different:

// URL format: https://<BASE_URL>/<TENANT_URL>/?username=abc&companyId=&page=1&pageSize=25&filterResultByColumns=true

NSURL *baseURL = [NSURL URLWithScheme:@"https" host:BASE_URL path:TENANT_URL];

[manager GET:[baseURL absoluteString] 
  parameters:@{ @"username": @"abc",
                @"companyId": @"example",
                @"page": @1,
                @"pageSize": @25,
                @"filterResultByColumns": @YES }
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
            // handle success
            }
     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            // handle failure
            }];

如果将参数传递给GET方法,AFNetworking将为您构建查询字符串。

If you pass your parameters into the GET method, AFNetworking will construct the query string for you.

这篇关于使用afnetworking在GET方法中传递url中的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆