2 using System.Collections.Generic;
3 using System.Reflection;
5 using Hammock.Attributes;
6 using Hammock.Attributes.Validation;
9 namespace Hammock.Extensions
11 internal static class WebExtensions
13 public static void ParseNamedAttributes<T>(this IWebQueryInfo info,
14 IEnumerable<PropertyInfo> properties,
15 IDictionary<string, string> transforms,
16 IDictionary<string, string> collection)
17 where T : Attribute, INamedAttribute
19 foreach (var property in properties)
21 var attributes = property.GetCustomAttributes<T>(true);
23 foreach (var attribute in attributes)
25 var value = transforms.ContainsKey(property.Name)
26 ? transforms[property.Name]
27 : property.GetValue(info, null);
34 var header = value.ToString();
35 if (!header.IsNullOrBlank())
37 collection.Add(attribute.Name, header);
43 public static Uri UriMinusQuery(this Uri uri, out WebParameterCollection parameters)
45 var sb = new StringBuilder();
47 parameters = new WebParameterCollection();
48 var query = uri.Query.ParseQueryString();
49 foreach(var key in query.Keys)
51 parameters.Add(key, query[key].UrlDecode());
54 var port = uri.Scheme.Equals("http") && uri.Port != 80 ||
55 uri.Scheme.Equals("https") && uri.Port != 443 ?
62 .Append(uri.AbsolutePath);
64 return new Uri(sb.ToString());
67 public static string ToBasicAuthorizationHeader(string username, string password)
69 var token = "{0}:{1}".FormatWith(username, password).GetBytes().ToBase64String();
70 return "Basic {0}".FormatWith(token);
73 public static void ParseValidationAttributes(this IWebQueryInfo info,
74 IEnumerable<PropertyInfo> properties,
75 IDictionary<string, string> collection)
77 foreach (var property in properties)
79 var attributes = property.GetCustomAttributes<ValidationAttribute>(true);
81 foreach (var attribute in attributes)
83 // Support multiple transforms
84 var value = collection.ContainsKey(property.Name)
85 ? collection[property.Name]
86 : property.GetValue(info, null);
88 var transformed = attribute.TransformValue(property, value);
89 if (transformed.IsNullOrBlank())
94 if(collection.ContainsKey(property.Name))
96 collection[property.Name] = transformed;
100 collection.Add(property.Name, transformed);