public HttpRequest(HttpRequestModel.HttpRequestModelResult requestModelResult)
 {
     RequestModelResult = requestModelResult;
 }
        protected virtual HttpRequest ToRequest(params string[] parameters)
        {
            InParameters  = parameters;
            TransactionId = $"{Guid.NewGuid().GetHashCode():X}";
            Log("<color=white><b>'" + GetType().FullName + "'</b> HTTP Operation Initializing</color>");
            HttpPathAttribute httpPath = GetHttpPath();

            HttpMethodAttribute[] array = (HttpMethodAttribute[])GetType().GetCustomAttributes(typeof(HttpMethodAttribute), inherit: true);
            if (array.Length == 0)
            {
                throw new Exception(GetType().Name + " class is missing [HttpMethod] attribute.");
            }
            if (array.Length > 1)
            {
                Log("Multiple [HttpMethod] attributes found.  Verb " + array[0].Verb + " will be used.", LogSeverity.ERROR);
            }
            Log("<color=green>" + array[0].Verb + "</color><color=cyan><b> " + httpPath.Uri + "</b></color>");
            HttpProviderAttribute[] array2 = (HttpProviderAttribute[])GetType().GetCustomAttributes(typeof(HttpProviderAttribute), inherit: true);
            if (array2.Length == 0)
            {
                array2 = new HttpProviderAttribute[1]
                {
                    new HttpProviderAttribute(Configuration.GetSetting <Type>("default-http-client"))
                };
                Log("Missing [HttpProvider] attribute.  Provider '" + array2[0].ProviderType.FullName + "' will be used.", LogSeverity.VERBOSE);
            }
            HttpTimeoutAttribute[] array3 = (HttpTimeoutAttribute[])GetType().GetCustomAttributes(typeof(HttpTimeoutAttribute), inherit: true);
            if (array3.Length == 0)
            {
                array3 = new HttpTimeoutAttribute[1]
                {
                    new HttpTimeoutAttribute(Configuration.GetSetting <float>("request-timeout"))
                };
            }
            Log("Request TTL : " + array3[0].Timeout + " seconds.", LogSeverity.VERBOSE);
            HttpHeaderAttribute[] httpClassHeaders = (HttpHeaderAttribute[])GetType().GetCustomAttributes(typeof(HttpHeaderAttribute), inherit: true);
            _cachedFieldInfos = GetType().GetFields(BindingFlags.Instance | BindingFlags.Public);
            HttpRequestModel model = new HttpRequestModel(this, array2[0], httpPath, array[0], array3[0], httpClassHeaders);

            FieldInfo[] cachedFieldInfos = _cachedFieldInfos;
            foreach (FieldInfo fieldInfo in cachedFieldInfos)
            {
                Log("Processing field '" + fieldInfo.Name + "'.", LogSeverity.VERBOSE);
                HttpMappedValueAttribute[] array4 = (HttpMappedValueAttribute[])fieldInfo.GetCustomAttributes(typeof(HttpMappedValueAttribute), inherit: true);
                HttpMappedValueAttribute[] array5 = array4;
                foreach (HttpMappedValueAttribute httpMappedValueAttribute in array5)
                {
                    if (httpMappedValueAttribute.MapOnRequest())
                    {
                        Log("Processing map '" + httpMappedValueAttribute.GetType().FullName + "'.", LogSeverity.VERBOSE);
                        httpMappedValueAttribute.Initialize();
                        string name  = httpMappedValueAttribute.OnRequestResolveName(this, fieldInfo);
                        object value = httpMappedValueAttribute.OnRequestResolveValue(name, this, fieldInfo);
                        value = httpMappedValueAttribute.OnRequestApplyConverters(value, this, fieldInfo);
                        httpMappedValueAttribute.OnRequestResolveModel(name, value, ref model, this, fieldInfo);
                    }
                }
            }
            HttpAuthorizationAttribute[] array6 = (HttpAuthorizationAttribute[])GetType().GetCustomAttributes(typeof(HttpAuthorizationAttribute), inherit: true);
            if (array6.Length > 0)
            {
                HttpAuthorizationAttribute httpAuthorizationAttribute = array6[0];
                Log("Processing map '" + httpAuthorizationAttribute.GetType().FullName + "'.", LogSeverity.VERBOSE);
                httpAuthorizationAttribute.Initialize();
                string name2  = httpAuthorizationAttribute.OnRequestResolveName(this, null);
                object value2 = httpAuthorizationAttribute.OnRequestResolveValue(name2, this, null);
                value2 = httpAuthorizationAttribute.OnRequestApplyConverters(value2, this, null);
                httpAuthorizationAttribute.OnRequestResolveModel(name2, value2, ref model, this, null);
            }
            HttpRequestModel.HttpRequestModelResult httpRequestModelResult = model.Build();
            Log(httpRequestModelResult.Summary(), LogSeverity.VERBOSE);
            Configuration.Log(httpRequestModelResult.LogSummary(), LogSeverity.DEBUG);
            return(new HttpRequest(httpRequestModelResult));
        }