هل تتوقع أسماء المعلمات سلسلة الاستعلام أن تكون قضية حساسة؟

StackOverflow https://stackoverflow.com/questions/808282

  •  03-07-2019
  •  | 
  •  

سؤال

وسيلفرلايت هو حالة حساسة للمعلمات سلسلة الاستعلام بحيث التعليمات البرمجية التالية سيعود كاذبة مع "callid = 5"

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

ويدافع عن مايكروسوفت قرار نقلا عن المواصفات www.w3.org، ولكن أعتقد أنه يؤدي إلى تجربة أقل ودا للناس في محاولة لربط لكم، أو إعطاء URL عبر الهاتف.

ويبدو ستاكوفيرفلوو هو قضية حساسة: 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) 

ويمكنك أيضا تحويل القاموس سلسلة استعلام مواقع المعلومات كله لقاموس جديد مع قضية حساسة المقارن إذا كنت تواجه العديد من عمليات البحث القاموس.

var insensitiveQueryString = HtmlPage.Document.QueryString.ToDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top