FlickrNet.Flickr.GetResponse C# (CSharp) Method

GetResponse() private method

private GetResponse ( Hashtable parameters, TimeSpan cacheTimeout ) : Response
parameters Hashtable
cacheTimeout TimeSpan
return Response
        private Response GetResponse(Hashtable parameters, TimeSpan cacheTimeout)
        {
            // Calulate URL
            StringBuilder UrlStringBuilder = new StringBuilder(BaseUrl, 2 * 1024);
            StringBuilder HashStringBuilder = new StringBuilder(_sharedSecret, 2 * 1024);

            UrlStringBuilder.Append("?");

            parameters["api_key"] = _apiKey;

            if( _apiToken != null && _apiToken.Length > 0 )
            {
                parameters["auth_token"] = _apiToken;
            }

            string[] keys = new string[parameters.Keys.Count];
            parameters.Keys.CopyTo(keys, 0);
            Array.Sort(keys);

            foreach(string key in keys)
            {
                if( UrlStringBuilder.Length > BaseUrl.Length + 1 ) UrlStringBuilder.Append("&");
                UrlStringBuilder.Append(key);
                UrlStringBuilder.Append("=");
                UrlStringBuilder.Append(Utils.UrlEncode((string)parameters[key]));
                HashStringBuilder.Append(key);
                HashStringBuilder.Append(parameters[key]);
            }

            if (_sharedSecret != null && _sharedSecret.Length > 0)
            {
                if (UrlStringBuilder.Length > BaseUrl.Length + 1)
                {
                    UrlStringBuilder.Append("&");
                }
                UrlStringBuilder.Append("api_sig=");
                UrlStringBuilder.Append(Md5Hash(HashStringBuilder.ToString()));
            }

            string url = UrlStringBuilder.ToString();
            _lastRequest = url;
            _lastResponse = string.Empty;

            if( CacheDisabled )
            {
                string responseXml = DoGetResponse(url);
                _lastResponse = responseXml;
                return Deserialize(responseXml);
            }
            else
            {
                ResponseCacheItem cached = (ResponseCacheItem) Cache.Responses.Get(url, cacheTimeout, true);
                if (cached != null)
                {
                    System.Diagnostics.Debug.WriteLine("Cache hit");
                    _lastResponse = cached.Response;
                    return Deserialize(cached.Response);
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("Cache miss");
                    string responseXml = DoGetResponse(url);
                    _lastResponse = responseXml;

                    ResponseCacheItem resCache = new ResponseCacheItem();
                    resCache.Response = responseXml;
                    resCache.Url = url;
                    resCache.CreationTime = DateTime.UtcNow;

                    FlickrNet.Response response = Deserialize(responseXml);

                    if( response.Status == ResponseStatus.OK )
                    {
                        Cache.Responses.Shrink(Math.Max(0, Cache.CacheSizeLimit - responseXml.Length));
                        Cache.Responses[url] = resCache;
                    }

                    return response;
                }
            }
        }
Flickr