クエリ文字列パラメーター名では大文字と小文字が区別されると思いますか?
-
03-07-2019 - |
質問
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
解決
標準の実装ではなく、命名規則に焦点を合わせる必要があると思います。同様のフィールド名や大文字と小文字が混在しないようにしてください。たとえば、電話で「すべて小文字」と読み上げることができる単語の規則を使用できます。または「すべて大文字」。
他のヒント
これをやった。役立つかどうかわかりません。
var keyName = "";
if (!string.IsNullOrEmpty(keyName = someDictionary.SomeKeys.FirstOrDefault(k => k.ToLowerInvariant() == "size")))
{
var someValue = someDictionary[keyName];
}
はい、大文字と小文字を区別することに慣れているため、長い間プログラミングを行ってきました。中間解析を行ってそれらをすべて小文字またはサーバー側に変換するメソッドを実装している人々を知っていますが、それは本当にあなたが具体的に何に取り組んでいるかに依存します。
ユーザビリティに関しては、そうです、読みにくいです。しかし、同時に、クエリ文字列を持つ電話のURLは、とにかく簡単に配布することはできません。
この回避策は、すべてのキーを反復処理するため、辞書の機能を使用しませんが、ほとんどのシナリオでは十分な回避策になる可能性があります。
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);