Asp.net - معلمة سلسلة الاستعلام فارغة
-
03-07-2019 - |
سؤال
المشكلة
ما هي الطريقة الصحيحة للتحقق من foo
المعلمة في سلسلة الاستعلام الخاصة بعنوان URL التالي باستخدام asp.net؟هل هذا ممكن حتى؟
http://example.com?bar=3&foo
لقد حاولت التحقق Request["foo"]
إلى جانب Request.QueryString["foo"]
وأحصل على null
لكليهما.لقد حاولت أيضًا ملء ملف List
مع القيم من QueryString
المجموعة ولكن كما أذكر أدناه، فهي لا تشمل القيمة.
السؤال
أنا أفهم أنه لا توجد قيمة، ولكن لا ينبغي Request["foo"]
إرجاع سلسلة فارغة بدلاً من null
؟هل هناك طريقة لمعرفة ما إذا كان مفتاح سلسلة الاستعلام موجودًا حتى لو لم يكن له قيمة؟
ملحوظات
وجدت هنا الذي - التي Request.QueryString.AllKeys
يشمل null
لمعلمات سلسلة الاستعلام الفارغة.
[يحرر]
كما هو مذكور أدناه بواسطة جوامع و دريس قد يكون Regex لتحليل عنوان URL الأولي هو النهج الأفضل (وربما الوحيد).
Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")
المحلول
يمكنك استخدام null
كمفتاح لل NameValueCollection
وسوف يوفر لك قائمة مفصولة بفواصل بأسماء المعلمات التي لا تحتوي على قيم.
ل http://example.com?bar=3&foo
سوف تستخدم Request.QueryString[null]
وسوف يسترد foo
.
إذا كان لديك أكثر من اسم معلمة واحدة بدون قيمة، فستمنحك قيمة مفصولة بفواصل.
ل http://example.com?bar=3&foo&test
سوف تحصل foo,test
كقيمة العودة.
تحديث:
يمكنك فعلا استخدام Request.QueryString.GetValues(null)
للحصول على أسماء المعلمات التي ليس لها قيم.
نصائح أخرى
وRequest.ServerVariables["QUERY_STRING"]
سيعود سلسلة الاستعلام، كاملة، كسلسلة. بعد ذلك بحث باستخدام التعبيرات المنتظمة أو IndexOf
ويمكنك الحصول على باطل لأن المعلمة foo
لا يكون لها قيمة معها.
... ما هي المشكلة بالضبط؟
إذا كنت لا تزال تريد التحقق من وجودها (على الرغم من أنها تفتقر إلى القيمة)، حاول شيئا من هذا القبيل:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
وDreas هو الصحيح. متغير "شريط" له قيمة ولكن فو لا.
وسلسلة استعلام مواقع المعلومات [ "بار"] سيعود 3 لأنه يحتوي على قيمة 3 المرتبطة مع شريط متغير. ومع ذلك، فإن فو العودة باطلة لأن من غير أي قيمة، وعندما كنت تتصل سلسلة استعلام مواقع المعلومات على متغير أو مفتاح، يتم الاستعلام عن القيمة، وليس المفتاح، لذلك هذا هو السبب كنت ستعود فارغة.
وسلسلة الاستعلام هو على الارجح واحدة من النفايات. إذا كنت تستخدم Request.Params [ ""] أو تكرار ذلك، فإنك سوف تجد واحدة المطلوب. في متناول اليدين حقا من الأشياء الأخرى.
واسمحوا لي أن أعرف إذا كنت بحاجة إلى أي مساعدة في هذا المجال.