Restful API + специальные символы

1

У меня есть следующий интерфейс 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. Любые идеи, что вызывает это? и как решить проблему?

Теги:
rest

1 ответ

1
Лучший ответ

Причиной этого является то, что символ "#" является специальным символом при использовании в URL-адресах (здесь вы можете найти дополнительную информацию: http://en.wikipedia.org/wiki/Fragment_identifier - больше зарезервированных символов - см. Раздел RFC 3986)

Вам следует избегать URL-адресов с использованием Percent-Encoding (http://en.wikipedia.org/wiki/Percent-encoding)

Итак, если вы хотите включить хэш-метку (#) в свои параметры - перейдите '% 23'.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню