【问题标题】:Windows phone URL encoding issues(Windows phone)Windows phone URL 编码问题(Windows phone)
【发布时间】:2015-06-19 07:47:46
【问题描述】:

对服务器的简单请求以获取文件会产生一些问题,这是 url,

https://dc2-vault.myvzw.com/dv/api/user/c107a6db69104a10bc247a28fb81131e/search?query=contentType:audio/* AND(类型类似于“RoyalJatt.Com”)&sort=name+asc&start=1&count=2147483647

然后我这样做,

url = Uri.EscapeUriString(url);

我明白了,

https://dc2-vault.myvzw.com/dv/api/user/c107a6db69104a10bc247a28fb81131e/search?query=contentType:audio/*%20AND%20(genre%20like%20'RoyalJatt.Com%20)')&sort=name+asc&start=1&count=2147483647

这里的问题是这样的,

查询查找流派为 RoyalJatt.Com%20) 的文件,该文件应该是 RoyalJatt.Com%20%29

由于某种原因,它省略了“)”

我能做些什么来解决这个问题?

【问题讨论】:

    标签: c# windows url uriencoding


    【解决方案1】:

    这就是我所做的,并得到了它的工作。

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

    【讨论】:

      【解决方案2】:

      好的,看来在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);
              }
          }
      }
      

      【讨论】:

      • 如果我将“RoyalJatt.Com )”更改为“RoyalJatt.Com”,这不会产生问题。
      • 抱歉不明白
      • 请不要重新发明轮子...已经有 Uri、UriBuilder 和 HttpUtility.ParseQueryString 等类来处理 url 和查询字符串的创建。s
      • 我猜有“在 c# 中构建 url 的最佳方法是什么?”和“为什么 Uri.EscapeUriString() 不按预期对我的网址进行编码”
      • @AlexeiLevenkov 很抱歉不同意......但是像 HttpUtility 这样的类在 Windows Phone 应用程序甚至 Windows 应用程序中都不存在。它们是基于网络的。我承认我没有添加我正在使用手机应用程序的必要信息。反正我现在改了
      猜你喜欢
      • 2013-10-05
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多