Frage

Mit dem folgenden Code ich einen netten formatierten String bekommen:

Request.QueryString.ToString 

Gibt mir so etwas wie: & hallo = world & microsoft = saugt

Aber wenn ich diesen Code verwenden, um die Sammlung zu einem anderen Objekt zu klonen (des gleichen Typs) bekomme ich den Typen () zurück von der ToString () -Methode statt.

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

Gibt es eine sauberere Weg, um es auszugeben anstatt auf der Suche und den Aufbau der Zeichenfolge manuell?

War es hilfreich?

Lösung

Sie können auch Reflektor verwenden, um die HttpValueCollection Klasse in der eigenen zu extrahieren, und verwenden Sie es dann.

Andere Tipps

HttpValueCollection ist intern, aber Sie können „var“ verwenden, um es zu erklären, ohne sie mit Reflektor zu extrahieren.

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

Weil es eigentlich eine besondere NVC ist, die vom Typ HTTPValueCollection ist. Also, wenn Sie .ToString auf ihn nennen, sie weiß, wie man es richtig formatiert werden.

Warum wollen Sie die Abfrage-Zeichenfolge-Sammlung in eine neue Namevaluecollection kopieren?

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

Ja, ich bin falsch, wird sie nur lesen. So ist die Essenz ist die Remove-Methode auf Ihrem Namevaluecollection zu verwenden:

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

Wenn Sie absolut nicht brauchen Namevaluecollection, ein Wörterbuch bietet eine Menge von der gleichen Semantik:

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

Request.QueryString tatsächlich ein HttpValueCollection Objekt zurück (die unfortuately, zu System.Web intern ist, so dass Sie nicht, dass Sie es).

Dennoch ist HttpValueCollection von Namevaluecollection abgeleitet, und es ist entfernen () -Methode bleibt intakt, so sollten Sie in der Lage sein Request.QueryString.Remove zu nennen ( "sid");

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top