示例#1
0
        /// <summary>
        /// Uses reflection to infer parameters from the request object and
        /// adds them to a web request
        /// </summary>
        /// <param name="webRequest">web request to receive parameters</param>
        internal void BuildRequestParameters(TelekomWebRequest webRequest)
        {
            PropertyInfo[] properties = this.GetType()
                .GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            foreach (PropertyInfo property in properties)
            {
                HttpParameterAttribute httpParamAttribute = property
                    .GetCustomAttributes(typeof(HttpParameterAttribute), false)
                    .SingleOrDefault() as HttpParameterAttribute;

                NoHttpParameterAttribute noHttpParamAttribute = property
                    .GetCustomAttributes(typeof(NoHttpParameterAttribute), false)
                    .SingleOrDefault() as NoHttpParameterAttribute;

                // Check for opt-out serialization attribute
                if (noHttpParamAttribute == null)
                {
                    string parameterName;
                    // Name overwritten?
                    if (httpParamAttribute != null)
                    {
                        parameterName = httpParamAttribute.Name;
                    }
                    else
                    {
                        // Infer parameter name from property and change the
                        // first letter to lower-case: OwnerId -> ownerId
                        parameterName = property.Name[0].ToString().ToLower()
                            + property.Name.Substring(1);
                    }
                    object value = property.GetValue(this, null);

                    // Only add defined values
                    if (value != null)
                    {
                        // Determin actual type to allow specific serialization
                        Type actualType = Nullable.GetUnderlyingType(property.PropertyType);
                        if (actualType == null)
                            actualType = property.PropertyType;

                        // Replace enum value if EnumMember attribute is specified
                        if (actualType.IsEnum)
                        {
                            FieldInfo enumFieldInfo = actualType.GetField(value.ToString());
                            EnumMemberAttribute enumMemberAttrib =
                                enumFieldInfo.GetCustomAttributes(typeof(EnumMemberAttribute), false)
                                .SingleOrDefault()
                                as EnumMemberAttribute;

                            // Enum value overwritten with EnumMember attribute?
                            if (enumMemberAttrib != null)
                            {
                                value = enumMemberAttrib.Value;
                            }
                            else
                            {
                                value = (int)enumFieldInfo.GetValue(property);
                            }
                        }

                        // Convert bool to string
                        if (actualType.Equals(typeof(bool)))
                        {
                            value = (bool)value ? "true" : "false";
                        }

                        // Convert DateTime to the expected format
                        if (actualType.Equals(typeof(DateTime)))
                        {
                            // Note: Since the service returns times in UTC that is converted to local time
                            // by .NET, we automatically convert it the other way round
                            value = ((DateTime)value)
                                .ToUniversalTime()
                                .ToString("s", System.Globalization.CultureInfo.InvariantCulture);
                            // Add UTC suffix
                            value += "Z";
                        }

                        if (actualType.Equals(typeof(Stream)))
                        {
                            webRequest.AddParameter(parameterName, (Stream)value);
                        }
                        else
                        {
                            webRequest.AddParameter(parameterName, value.ToString());
                        }
                    }
                }
            }
        }
示例#2
0
        private TelekomWebRequest CreateRequestRevokeWebRequest()
        {
            if (!HasRefreshToken())
                throw new InvalidOperationException("Cannot revoke without a refresh token");

            string uri = BaseUrl + "/revoke";

            var request = new RevokeRequest()
            {
                ClientId = ClientId,
                ClientSecret = ClientSecret,
                Token = RefreshToken,
                TokenType = "refresh_token"
            };

            var webRequest = new TelekomWebRequest(uri, HttpMethod.POST);
            request.BuildRequestParameters(webRequest);
            return webRequest;   
        }
示例#3
0
 /// <summary>
 /// Prepare a web request to STS server
 /// </summary>
 /// <returns></returns>
 private TelekomWebRequest CreateTokenRequest()
 {
     TelekomWebRequest request = new TelekomWebRequest(Url, HttpMethod.GET);
     request.Credentials = new NetworkCredential(username, password);
     request.Accept = "text/plain";
     return request;
 }