إخراج سلسلة استعلام مواقع المعلومات التلاعب في C #

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

سؤال

<ع> استخدام التعليمات البرمجية التالية أحصل على سلسلة المنسقة لطيفة:

Request.QueryString.ToString 

ويعطي لي شيء من هذا القبيل: ومرحبا = العالم ومايكروسوفت = تمتص

ولكن عند استخدام هذا الرمز إلى استنساخ جمع إلى كائن آخر (من نفس النوع) أحصل على النوع () مرة أخرى من أسلوب ToString () بدلا من ذلك.

System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
    variables.Remove("sid");
Response.Write(variables.ToString());

هل هناك طريقة أرتب لإخراج أنه بدلا من النظر وبناء سلسلة يدويا؟

هل كانت مفيدة؟

المحلول

ويمكنك أيضا استخدام العاكس لاستخراج الدرجة HttpValueCollection حيز الخاصة بك، واستخدامها بعد ذلك.

نصائح أخرى

وHttpValueCollection هو داخلي، ولكن يمكنك استخدام "فار" لنعلن ذلك دون استخراج مع العاكس.

var query = HttpUtility.ParseQueryString(Request.Url.Query);
query["Lang"] = myLanguage; // Add or replace param
string myNewUrl = Request.Url.AbsolutePath + "?" + query;

ولأنه هو في الواقع NVC الخاصة التي هي من نوع HTTPValueCollection. حتى عند استدعاء .ToString على ذلك، فإنه يعرف كيفية تنسيق بشكل صحيح.

وماذا تريد لنسخ جمع سلسلة استعلام مواقع المعلومات في NameValueCollection على جديد؟

    if (!string.IsNullOrEmpty(Request.QueryString["sid"]))
        Request.QueryString.Remove("sid");

ونعم في الواقع، كنت مخطئا، وقراءتها فقط. وبالتالي فإن جوهر هو استخدام أسلوب إزالة على NameValueCollection على الخاص بك:

System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
    variables.Remove("sid");

إذا كنت لا حاجة على الاطلاق لNameValueCollection على، A القاموس يقدم الكثير من نفس دلالات:

var variables = Request.QueryString.OfType<DictionaryEntry>()
    .Where(entry => entry.Key != "sid")
    .ToDictionary(entry => entry.Key, entry => entry.Value);

وRequest.QueryString فعلا بإرجاع كائن HttpValueCollection (التي unfortuately، داخلي إلى System.Web حتى تتمكن من ليس لك منه).

وعلى الرغم من ذلك، وهو مستمد من HttpValueCollection NameValueCollection على، وانها إزالة () لا تزال طريقة سليمة، لذلك يجب أن تكون قادرا على استدعاء Request.QueryString.Remove ( "سيد")؛

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