DotNetOpenAuth uses Uri.HexEscape()
and Uri.EscapeDataString()
on the additional parameters. This breaks when your parameters are over 2Kb in length.
I have swapped out their function for my own inefficient, but working, function:
internal static string EscapeUriDataStringRfc3986(string value)
{
StringBuilder escaped = new StringBuilder();
string validChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-._~";
foreach (char c in value)
{
if(validChars.Contains(c.ToString())){
escaped.Append(c);
} else {
escaped.Append("%" + Convert.ToByte(c).ToString("x2").ToUpper());
}
}
// Return the fully-RFC3986-escaped string.
return escaped.ToString();
}