2015-04-13 12 views
1

Простой запрос к серверу, чтобы получить файл, дает некоторые проблемы, Вот URL,вопросы Windows, кодировка телефона URL (Windows Phone)

https://dc2-vault.myvzw.com/dv/api/user/c107a6db69104a10bc247a28fb81131e/search?query=contentType:audio/ * И (жанр, как «RoyalJatt.Com)») & рода = имя + по возрастанию & начало = 1 & счетчик = 2147483647

тогда я это сделать,

url = Uri.EscapeUriString(url); 

я получаю,

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

Проблема здесь это,

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

по какой-то причине, опуская «)»

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

ответ

0

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

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(); 
    } 
1

Хорошо, поэтому кажется, что данные кодирования для использования в 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); 
     } 
    } 
} 
+0

если я изменить "RoyalJatt.Com)" на "RoyalJatt.Com" это не создает проблемы. – golldy

+0

Извините, не понимаю – Ewan

+0

Не заново изобретайте колесо ... Есть уже существующие классы, такие как Uri, UriBuilder и HttpUtility.ParseQueryString, чтобы иметь дело с созданием urls и query string.s –