2009-04-30 59 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]; 
}