public void ToString_NullValue_EmptyStringReturned()
        {
            var format = "yyyyMMdd";
            var stringFormatAttribute = new StringFormatAttribute(format);
            var transformedValue      = stringFormatAttribute.ToString(null);

            Assert.AreEqual(String.Empty, transformedValue);
        }
        public void ToString_Date_FormattedDateReturned()
        {
            var value  = DateTime.Parse("2000-12-01");
            var format = "yyyyMMdd";
            var stringFormatAttribute = new StringFormatAttribute(format);
            var transformedValue      = stringFormatAttribute.ToString(value);

            Assert.AreEqual("20001201", transformedValue);
        }
        public void ToString_DateWithCurrencyFormat_CurrencyFormatStringReturned()
        {
            var value  = DateTime.Parse("2000-12-01");
            var format = "C2";
            var stringFormatAttribute = new StringFormatAttribute(format);
            var transformedValue      = stringFormatAttribute.ToString(value);

            Assert.AreEqual(format, transformedValue);
        }
Example #4
0
        public static IEnumerable <HttpContent> ExtractMultipleFormContent(string name, object value, StringFormatAttribute formatter, int deep, string defaultContentDisposition = MultiPartType.FormData)
        {
            if (deep < 0 || value == null)
            {
                return(Enumerable.Empty <HttpContent>());
            }

            var quotedName = "\"" + name + "\"";

            Func <object, string> autoEncodeParameter = (val) =>
            {
                return(formatter.Format(val, CultureInfo.InvariantCulture));
                //return urlEncode?HttpUtility.UrlEncode(valStr):valStr;
            };

            var kps = new List <HttpContent>();

            var paramType = value.GetType();

            if (value is MultipartFileData)
            {
                var f       = value as MultipartFileData;
                var content = new StreamContent(File.OpenRead(f.LocalFileName));
                if (f.Headers != null)
                {
                    foreach (var h in f.Headers)
                    {
                        content.Headers.TryAddWithoutValidation(h.Key, h.Value);
                    }
                }
                if (content.Headers.ContentDisposition == null)
                {
                    content.Headers.ContentDisposition = new ContentDispositionHeaderValue(defaultContentDisposition);
                }
                if (string.IsNullOrWhiteSpace(content.Headers.ContentDisposition.Name))
                {
                    content.Headers.ContentDisposition.Name = quotedName;
                }


                if (string.IsNullOrWhiteSpace(content.Headers.ContentDisposition.FileName))
                {
                    content.Headers.ContentDisposition.FileName = Path.GetFileName(f.LocalFileName);
                }

                content.Headers.ContentType = new MediaTypeHeaderValue(MimeUtility.GetMimeMapping(f.LocalFileName));
                kps.Add(content);
            }
            else if (value is FileInfo)
            {
                var f       = value as FileInfo;
                var content = new StreamContent(f.OpenRead());
                content.Headers.ContentDisposition          = new ContentDispositionHeaderValue(defaultContentDisposition);
                content.Headers.ContentDisposition.FileName = f.Name;
                content.Headers.ContentDisposition.Name     = quotedName;
                content.Headers.ContentType = new MediaTypeHeaderValue(MimeUtility.GetMimeMapping(f.Name));
                kps.Add(content);
            }
            else if (value is FileStream)
            {
                var s       = value as FileStream;
                var content = new StreamContent(s);
                content.Headers.ContentDisposition          = new ContentDispositionHeaderValue(defaultContentDisposition);
                content.Headers.ContentDisposition.FileName = s.Name;
                content.Headers.ContentDisposition.Name     = quotedName;
                content.Headers.ContentType = new MediaTypeHeaderValue(MimeUtility.GetMimeMapping(s.Name));
                kps.Add(content);
            }
            else if (value is Stream)
            {
                var s       = value as Stream;
                var content = new StreamContent(s);
                content.Headers.ContentDisposition      = new ContentDispositionHeaderValue(defaultContentDisposition);
                content.Headers.ContentDisposition.Name = quotedName;
                kps.Add(content);
            }
            else if (value is IEnumerable <byte> )
            {
                var content = new ByteArrayContent((value as IEnumerable <byte>).ToArray());
                content.Headers.ContentDisposition      = new ContentDispositionHeaderValue(defaultContentDisposition);
                content.Headers.ContentDisposition.Name = quotedName;
                kps.Add(content);
            }
            else if (paramType.IsEnum)
            {
                var content = new StringContent(Convert.ToString(autoEncodeParameter((int)value)), Encoding.UTF8);
                content.Headers.ContentDisposition      = new ContentDispositionHeaderValue(defaultContentDisposition);
                content.Headers.ContentDisposition.Name = quotedName;
                kps.Add(content);
            }
            else if (paramType.IsBulitInType())
            {
                var content = new StringContent(Convert.ToString(autoEncodeParameter(value)), Encoding.UTF8);
                content.Headers.ContentDisposition      = new ContentDispositionHeaderValue(defaultContentDisposition);
                content.Headers.ContentDisposition.Name = quotedName;
                kps.Add(content);
            }
            else if (paramType.IsEnumerableType())
            {
                var vals = ((IEnumerable)value).Cast <object>();
                foreach (var val in vals)
                {
                    var content = new StringContent(autoEncodeParameter(val), Encoding.UTF8);
                    content.Headers.ContentDisposition      = new ContentDispositionHeaderValue(defaultContentDisposition);
                    content.Headers.ContentDisposition.Name = quotedName;
                    kps.Add(content);
                }
                //kps.Add(new KeyValuePair<string, string>(name, autoEncodeParameter((string.Join(",", value)))));
            }
            else
            {
                foreach (var p in paramType.GetProperties())
                {
                    if (p.IsDefined(typeof(HttpIgnoreAttribute)))
                    {
                        continue;
                    }
                    var pName       = p.Name;
                    var pNameAttr   = p.GetCustomAttribute <HttpAliasAttribute>();
                    var pFormatAttr = p.GetCustomAttribute <StringFormatAttribute>();
                    if (pNameAttr != null && !string.IsNullOrWhiteSpace(pNameAttr.Name))
                    {
                        pName = pNameAttr.Name;
                    }
                    var propertyValue = p.GetValue(value);
                    if (propertyValue != null)
                    {
                        kps.AddRange(ExtractMultipleFormContent(pName, propertyValue, pFormatAttr ?? formatter, deep - 1, defaultContentDisposition));
                    }
                }
            }
            return(kps);
        }
Example #5
0
        public static IEnumerable <KeyValuePair <string, string> > ExtractUrlParameter(string name, object value, StringFormatAttribute formatter, int deep)
        {
            if (deep < 0 || value == null)
            {
                return(Enumerable.Empty <KeyValuePair <string, string> >());
            }


            Func <object, string> autoEncodeParameter = (val) =>
            {
                return(formatter.Format(val, CultureInfo.InvariantCulture));
                //return urlEncode?HttpUtility.UrlEncode(valStr):valStr;
            };

            var kps = new List <KeyValuePair <string, string> >();

            var paramType = value.GetType();


            if (paramType.IsEnum)
            {
                kps.Add(new KeyValuePair <string, string>(name, autoEncodeParameter((int)value)));
            }
            else if (paramType.IsBulitInType())
            {
                kps.Add(new KeyValuePair <string, string>(name, autoEncodeParameter(value)));
            }
            else if (paramType.IsEnumerableType())
            {
                var vals = ((IEnumerable)value).Cast <object>();
                foreach (var val in vals)
                {
                    kps.Add(new KeyValuePair <string, string>(name, autoEncodeParameter(val)));
                }
                //kps.Add(new KeyValuePair<string, string>(name, autoEncodeParameter((string.Join(",", value)))));
            }
            else
            {
                foreach (var p in paramType.GetProperties())
                {
                    if (p.IsDefined(typeof(HttpIgnoreAttribute)))
                    {
                        continue;
                    }
                    var pName       = p.Name;
                    var pNameAttr   = p.GetCustomAttribute <HttpAliasAttribute>();
                    var pFormatAttr = p.GetCustomAttributes().FirstOrDefault(a => a is StringFormatAttribute) as StringFormatAttribute;

                    if (pNameAttr != null && !string.IsNullOrWhiteSpace(pNameAttr.Name))
                    {
                        pName = pNameAttr.Name;
                    }
                    var propertyValue = p.GetValue(value);
                    if (propertyValue != null)
                    {
                        if (pFormatAttr != null)
                        {
                            kps.Add(new KeyValuePair <string, string>(pName, pFormatAttr.Format(propertyValue, CultureInfo.InvariantCulture)));
                        }
                        else
                        {
                            kps.AddRange(ExtractUrlParameter(pName, propertyValue, formatter, deep - 1));
                        }
                    }
                }
            }
            return(kps);
        }