2009-04-30 58 views
4

Silverlight是区分大小写的查询字符串参数,下面的代码将返回false与“呼叫ID = 5”您是否期望查询字符串参数名称区分大小写?

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

微软通过援引www.w3.org规范辩护的决定,但我认为它会导致对尝试链接到您的用户不太友好的体验,或通过电话提供URL。

貌似#1不区分大小写: https://stackoverflow.com/search?q=silverlight+bug https://stackoverflow.com/search?Q=silverlight+bug

+0

你能举出MS的引用吗? – annakata 2010-09-20 09:57:00

回答

4

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

0

是的,我已经习惯了它是区分大小写的,因此已经被编程到了很长一段时间。我知道一些人已经实现了中间解析的方法来将它们全部转换为小写或其他服务器端的东西,而且这实际上取决于你正在使用什么。

至于可用性,是的,它很难阅读。但是,与此同时,具有查询字符串的电话上的URL并非易事。

0

此替代方法不会使用字典的威力,因为它会遍历所有密钥,但对于大多数情况来说,它很可能是一种充分的解决方法。

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

我做到了。不知道它是否有帮助。

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