【问题标题】:Do you expect query string parameter names to be case sensitive?您是否希望查询字符串参数名称区分大小写?
【发布时间】:2014-05-27 01:08:43
【问题描述】:

Silverlight 对查询字符串参数区分大小写,因此以下代码将使用“callid=5”返回 false

string callId;
if (System.Windows.Browser.HtmlPage.Document.QueryString.TryGetValue("callId", out callId))
{
....
}

Microsoft 通过引用 www.w3.org 规范为该决定辩护,但我认为这会导致人们尝试链接到您或通过电话提供 URL 的体验不太友好。

看起来 Stackoverflow 不区分大小写: https://stackoverflow.com/search?q=silverlight+bug https://stackoverflow.com/search?Q=silverlight+bug

【问题讨论】:

标签: silverlight query-string


【解决方案1】:

我认为您应该专注于您的命名约定而不是标准的实现,确保避免类似的字段名称和混合大小写。例如,您可以使用可以通过电话读出的单词约定,说明“全部小写”或“全部大写”。

【讨论】:

    【解决方案2】:

    我做到了。不知道有没有帮助。

    var keyName = "";
    if (!string.IsNullOrEmpty(keyName = someDictionary.SomeKeys.FirstOrDefault(k => k.ToLowerInvariant() == "size")))
    {
        var someValue = someDictionary[keyName];
    }
    

    【讨论】:

      【解决方案3】:

      是的,我已经习惯了它区分大小写,因此已经为它编程了很长时间。我知道有些人已经实现了进行中间解析以将它们全部转换为小写或其他服务器端的方法,这实际上取决于您具体使用的是什么。

      至于可用性,是的,它更难阅读。但是,与此同时,电话上带有查询字符串的 URL 无论如何都不容易提供。

      【讨论】:

        【解决方案4】:

        此解决方法不会使用字典的强大功能,因为它会遍历所有键,但对于大多数情况来说,它可能是足够的解决方法。

        var keyName = HtmlPage.Document.QueryString.Keys.SingleOrDefault(key => key.Equals("callid", StringComparison.OrdinalIgnoreCase));
        
        string callid;
        HtmlPage.Document.QueryString.TryGetValue(keyName, out callid) 
        

        如果您有许多字典查找,您还可以将整个 QueryString 字典转换为具有不区分大小写比较器的新字典。

        var insensitiveQueryString = HtmlPage.Document.QueryString.ToDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase);
        

        【讨论】:

          猜你喜欢
          • 2014-09-02
          • 1970-01-01
          • 1970-01-01
          • 2013-06-03
          • 2012-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-07
          相关资源
          最近更新 更多