Проблемы с кодировкой URL-адреса Windows Phone (Windows Phone)

Простой запрос к серверу для получения файла вызывает некоторые проблемы, вот URL,

https://dc2-vault.myvzw.com/dv/api/user/c107a6db69104a10bc247a28fb81131e/search?query=contentType:audio/* AND (жанр, такой как "RoyalJatt.Com)") & sort = name + asc & start =3647 = 21 & count =1& count =

тогда я делаю это,

url = Uri.EscapeUriString(url);

я получил,

https://dc2-vault.myvzw.com/dv/api/user/c107a6db69104a10bc247a28fb81131e/search?query=contentType:audio/*% 20AND% 20 (жанр% 20like% 20'RoyalJatt.Com%20)')&sort имя + возрастанию & начать =1& Count=2147483647

Проблема здесь заключается в следующем,

запрос ищет файл с жанром RoyalJatt.Com%20), который должен был быть RoyalJatt.Com% 20%29

Почему-то опускается ")"

Что я могу сделать, чтобы это исправить?

2 ответа

Решение

Вот что я сделал и получил это работает.

    private readonly static string reservedCharacters = "!*'();:@&=+$,/?%#[]";`

    //Neither of Uri.EscapeUriString and Uri.EscapeDataString methods encodes 
    //the RFC 2396 unreserved characters If you need these encoded then you 
    //will have to manually encode them
    public static string UrlEncode(string value)
    {
        if (String.IsNullOrEmpty(value))
            return String.Empty;

        var sb = new StringBuilder();

        foreach (char @char in value)
        {
            if (reservedCharacters.IndexOf(@char) == -1)
                sb.Append(@char);
            else
                sb.AppendFormat("%{0:X2}", (int)@char);
        }
        return sb.ToString();
    }

Итак, кажется, что данные кодирования для использования в URL-адресе - это не то же самое, что кодирование URL-адреса!

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace Model_Library
{
    [TestClass]
    public class test
    {
        [TestMethod]
        public void test2()
        {
            string url = @"https://dc2-vault.myvzw.com/dv/api/user/c107a6db69104a10bc247a28fb81131e/";
            string data = @"search?query=" + Uri.EscapeDataString(@"contentType:audio/* AND (genre like 'RoyalJatt.Com )')") + @"&sort=name+asc&start=1&count=2147483647";
            string enc = Uri.EscapeUriString(url) + data;

            Console.Write(enc);
        }
    }
}
Другие вопросы по тегам