示例#1
0
        private RestyRequest GetRequest(OperationConfig config, OperationMetadata metadata, RequestMap requestMap)
        {
            RestyRequest restyRequest = null;
            IDictionary <string, object> dictionary  = requestMap.Clone();
            IDictionary <string, object> dictionary2 = Util.SubMap(dictionary, config.HeaderParams);
            Uri uRL     = this.GetURL(config, metadata, dictionary);
            Uri baseUrl = new Uri(string.Concat(new object[]
            {
                uRL.Scheme,
                "://",
                uRL.Host,
                ":",
                uRL.Port
            }));
            CryptographyInterceptor cryptographyInterceptor = _apiConfig?.GetCryptographyInterceptor(uRL.AbsolutePath) ?? ApiConfig.GetCryptographyInterceptor(uRL.AbsolutePath);
            string action = config.Action;

            if (!(action == "create"))
            {
                if (!(action == "delete"))
                {
                    if (!(action == "update"))
                    {
                        if (action == "read" || action == "list" || action == "query")
                        {
                            restyRequest = new RestyRequest(uRL, Method.GET);
                        }
                    }
                    else
                    {
                        restyRequest = new RestyRequest(uRL, Method.PUT);
                        if (cryptographyInterceptor != null)
                        {
                            dictionary = cryptographyInterceptor.Encrypt(dictionary);
                        }
                        if (config.RequestType == DataType.Json)
                        {
                            restyRequest.AddJsonBody(dictionary);
                        }
                        else if (config.RequestType == DataType.Xml)
                        {
                            restyRequest.AddXmlBody(dictionary);
                        }
                    }
                }
                else
                {
                    restyRequest = new RestyRequest(uRL, Method.DELETE);
                }
            }
            else
            {
                restyRequest = new RestyRequest(uRL, Method.POST);
                if (cryptographyInterceptor != null)
                {
                    dictionary = cryptographyInterceptor.Encrypt(dictionary);
                }
                if (config.RequestType == DataType.Json)
                {
                    restyRequest.AddJsonBody(dictionary);
                }
                else if (config.RequestType == DataType.Xml)
                {
                    restyRequest.AddXmlBody(dictionary);
                }
            }
            if (config.RepsonseType == DataType.Json)
            {
                restyRequest.AddHeader("Accept", "application/json");
            }
            else if (config.RepsonseType == DataType.Xml)
            {
                restyRequest.AddHeader("Accept", "application/xml");
            }
            if (config.RequestType == DataType.Json)
            {
                restyRequest.AddHeader("Content-Type", "application/json");
            }
            else if (config.RequestType == DataType.Xml)
            {
                restyRequest.AddHeader("Content-Type", "application/xml");
            }

            restyRequest.AddHeader("User-Agent", "CSharp-SDK-Unofficial/" + this.apiVersion);
            foreach (KeyValuePair <string, object> current in dictionary2)
            {
                restyRequest.AddHeader(current.Key, current.Value.ToString());
            }
            (_apiConfig?.GetAuthentication() ?? ApiConfig.GetAuthentication()).SignRequest(uRL, restyRequest);
            restyRequest.AbsoluteUrl = uRL;
            restyRequest.BaseUrl     = baseUrl;
            restyRequest.interceptor = cryptographyInterceptor;
            return(restyRequest);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="action"></param>
        /// <param name="config"></param>
        /// <param name="inputMap"></param>
        /// <returns></returns>
        protected RestyRequest GetRequest(OperationConfig config, OperationMetadata metadata, RequestMap requestMap)
        {
            RestyRequest request = null;


            // separate the parameterMap and headerMap from requestMap
            IDictionary <String, Object> paramterMap = requestMap.Clone();
            IDictionary <String, Object> headerMap   = Util.SubMap(paramterMap, config.HeaderParams);

            Uri    url           = GetURL(config, metadata, paramterMap);
            String baseUriString = url.Scheme + "://" + url.Host + ":" + url.Port;
            Uri    baseUrl       = new Uri(baseUriString);

            string contentType = "application/json; charset=utf-8";

            if (metadata.ContentTypeOverride != null)
            {
                contentType = metadata.ContentTypeOverride + "; charset=utf-8";
            }

            CryptographyInterceptor interceptor = ApiConfig.GetCryptographyInterceptor(url.AbsolutePath);



            switch (config.Action)
            {
            case "create":
                request = new RestyRequest(url, Method.POST);

                //arizzini: adding cryptography interceptor for POST
                if (interceptor != null)
                {
                    paramterMap = interceptor.Encrypt(paramterMap);
                }
                request.AddJsonBody(paramterMap);
                break;

            case "delete":
                request = new RestyRequest(url, Method.DELETE);
                break;

            case "update":
                request = new RestyRequest(url, Method.PUT);

                //arizzini: adding cryptography interceptor for PUT
                if (interceptor != null)
                {
                    paramterMap = interceptor.Encrypt(paramterMap);
                }
                request.AddJsonBody(paramterMap);
                break;

            case "read":
            case "list":
            case "query":
                request = new RestyRequest(url, Method.GET);
                break;
            }

            request.AddHeader("Accept", contentType);
            if (request.HasBody)
            {
                request.AddHeader("Content-Type", contentType);
            }
            request.AddHeader("User-Agent", Constants.getCoreVersion() + "/" + metadata.Version);

            //arizzini: adding the header paramter support.
            foreach (KeyValuePair <string, object> entry in headerMap)
            {
                request.AddHeader(entry.Key, entry.Value.ToString());
            }

            ApiConfig.GetAuthentication().SignRequest(url, request);


            request.AbsoluteUrl = url;
            request.BaseUrl     = baseUrl;
            request.interceptor = interceptor;


            return(request);
        }