ASIHttpRequest - how to convert NSDictionary of pa

2019-09-03 04:46发布

问题:

What is the preferred way to make a GET request with ASIHttpRequest using query params provided as an NSDictionary. How do I get from NSDictionary *params
to ?param1=value1&param2=value2 (percent-encoded)

Obviously I can construct the query part of the URL manually but it seems like there is probably a better way.

Thanks!

回答1:

You must pass the query string as part of the URL. From the ASIHTTPRequest interface on GitHub:

// The url for this operation, should include GET params in the query string where appropriate
NSURL *url; 

If you don't want to roll your own dictionary-to-query-string method, take a look at the GTMNSDictionary+URLArguments category in Google Toolbox for Mac (.h, .m). It adds a method, gtm_httpArgumentString, to NSDictionary that should be what you're after.



回答2:

I am not using ASIHTTPRequest, but I have a similar need for a URLRequest I make. Here is what I am doing:

- (NSString *) createParamString 
{
    NSDictionary *params = // build up the param dictionary    
    NSString *result = @"";
    id key;
    NSEnumerator *enumerator = [params keyEnumerator];
    while (key = [enumerator nextObject]) {
        result = [result stringByAppendingFormat:@"%@=%@&", key, [params objectForKey:key]];
    }
    result = [result substringToIndex:[result length] - 2];
    return [result stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
}

Not sure if it's perfect for all situations, but it's working well enough for me