У меня есть следующий интерфейс Rest:
[OperationContract(AsyncPattern = true)]
[WebInvoke(Method = "POST", UriTemplate = "/Save/servers/{serverName}/databases{databaseName}")]
Task Save(string subscriptionId, string serverName, string databaseName, Stream policyStream);
Я вызываю использование этого метода клиента
private async Task<RestResponse> SendRequestWithPayloadAsync(string verbName, string methodName, string requestBody, IEnumerable<object> parameters = null)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
string address = BuildAddress(methodName, parameters);
if (requestBody == null)
{
requestBody = String.Empty;
}
byte[] payload = Encoding.UTF8.GetBytes(requestBody);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
SetCertificateSettings(request);
request.Method = verbName;
request.ContentType = "text/xml;charset=utf-8";
request.ContentLength = payload.Length;
// send request over the network
using (Stream dataStream = await request.GetRequestStreamAsync())
{
await dataStream.WriteAsync(payload, 0, payload.Length);
}
return await GetResponse(request, stopwatch, payload.Length);
}
Когда имя базы данных заканчивается на "#", я не получаю его в методе "Сохранить". Например, если я отправляю
databases\hgは常#
Я получаю значение аргумента базы данных hgは常
value. Любые идеи, что вызывает это? и как решить проблему?
Причиной этого является то, что символ "#" является специальным символом при использовании в URL-адресах (здесь вы можете найти дополнительную информацию: http://en.wikipedia.org/wiki/Fragment_identifier - больше зарезервированных символов - см. Раздел RFC 3986)
Вам следует избегать URL-адресов с использованием Percent-Encoding (http://en.wikipedia.org/wiki/Percent-encoding)
Итак, если вы хотите включить хэш-метку (#) в свои параметры - перейдите '% 23'.