سؤال

المشكلة

ما هي الطريقة الصحيحة للتحقق من 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 [ ""] أو تكرار ذلك، فإنك سوف تجد واحدة المطلوب. في متناول اليدين حقا من الأشياء الأخرى.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top