This seems to be the same problem we encountered when developing Splunk C# SDK. It is due to URL munging inside .NET. To solve it, you may add genericUriParserOptions="DontUnescapePathDotsAndSlashes" to app.config, or use reflection to change .NET behavior.
Below is from code of Splunk C# SDK.
/// <summary>
/// Constructs a fully qualified URL for this service using a given
/// path.
/// </summary>
/// <param name="path">The path.</param>
/// <returns>The fully qualified URL.</returns>
public Uri GetUrl(string path)
{
// Taken from http://stackoverflow.com/questions/781205/getting-a-url-with-an-url-encoded-slash
// WebRequest can munge an encoded URL, and we don't want it to.
// This technique forces WebRequest to leave the URL alone. There is
// no simple mechanism to ask .Net to do this, once there is, this
// code can be changed. This code also may break in the future, as
// it reaches into the class's non-public fields and whacks them
// with a hammer.
//
// An alternative is to use
// genericUriParserOptions="DontUnescapePathDotsAndSlashes"
// in app.config. However, that is a global setting, which is owned
// by the application using the Splunk SDK. There's no way to
// configure the setting just of the Splunk SDK assembly.
Uri uri = new Uri(this.Prefix + path);
string paq = uri.PathAndQuery; // need to access PathAndQuery
FieldInfo flagsFieldInfo =
typeof(Uri).GetField(
"m_Flags", BindingFlags.Instance | BindingFlags.NonPublic);
ulong flags = (ulong)flagsFieldInfo.GetValue(uri);
// Flags.PathNotCanonical|Flags.QueryNotCanonical = 0x30
flags &= ~((ulong)0x30);
flagsFieldInfo.SetValue(uri, flags);
return uri;
}
... View more