Ausgeben eines manipulierten Abfrage-Zeichenfolge in C #
-
04-07-2019 - |
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?
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");