예제 #1
0
        async Task <IApiResponse> ProcessResponse(IApiRequest request)
        {
            if (Config.UseCache && TryHitCache(request, true, out IApiResponse response))
            {
                return(response);
            }

            TryGetETag(request, out string eTag);
            request.SetHeader("If-None-Match", eTag);

            response = await responseManager.GetResponse(request);

            if (response is ApiError)
            {
                ApiError error = response as ApiError;
                if (error.StatusCode == System.Net.HttpStatusCode.NotModified)
                {
                    TryHitCache(request, false, out response);
                    response.Expired = error.Expired;
                }
            }

            if (response.Expired != default && (Cacheability.Public | Cacheability.Private).HasFlag(response.CacheControl.Cacheability))
            {
                SaveToCache(request, response);
            }

            return(response);
        }
예제 #2
0
        async Task <int> AddToRequestQueue(IApiRequest request)
        {
            await tokenManager.AddAuthTokens(request);

            if (string.IsNullOrEmpty(Config.UserAgent))
            {
                throw new Exception("User-Agent must be set.");
            }

            request.SetHeader("User-Agent", Config.UserAgent);

            return(requestQueue.AddRequest(request));
        }
예제 #3
0
        /// <summary>
        /// Add auth token to the correct location accoridng to the login config
        /// </summary>
        /// <param name="request"></param>
        /// <param name="token"></param>
        void AddTokenLocation(IApiRequest request, string token)
        {
            switch (Config.TokenLocation)
            {
            case "header":
                request.SetHeader(Config.TokenName, token);
                break;

            case "query":
                request.SetParameter(Config.TokenName, token);
                break;

            default:
                throw new Exception("Invalid token location");
            }
        }