public string Name {
get {
- return FindParameter ("name");
+ var value = FindParameter ("name");
+
+ if (value == null)
+ return null;
+
+ return DecodeValue (value, false);
}
set {
+ if (value != null)
+ value = EncodeBase64Value (value);
+
SetValue ("name", value);
}
}
static string EncodeBase64Value (string value)
{
+ bool quoted = value.Length > 1 && value [0] == '"' && value [value.Length - 1] == '"';
+ if (quoted)
+ value = value.Substring (1, value.Length - 2);
+
for (int i = 0; i < value.Length; ++i) {
var ch = value[i];
if (ch > 127) {
}
}
- if (!Lexer.IsValidToken (value))
+ if (quoted || !Lexer.IsValidToken (value))
return "\"" + value + "\"";
return value;
continue;
}
+ if (!Lexer.IsValidCharacter (ch) || ch == '*' || ch == '?' || ch == '%') {
+ sb.Append (Uri.HexEscape (ch));
+ continue;
+ }
+
sb.Append (ch);
}