Wie Entferne ich Elemente aus dem query-string für die Umleitung?
In mein-base-Seite, die ich brauche um ein Element zu entfernen aus dem query-string und umleiten. Ich kann nicht verwenden
Request.QueryString.Remove("foo")
weil die Sammlung schreibgeschützt ist. Gibt es eine Möglichkeit, um die Abfrage-string (mit Ausnahme, dass eine Position), ohne zu iterieren durch die Sammlung und neu bauen?
- Der Grund, den der querystring ist read-only ist, dass der querystring ist im browser. Sie können nicht tun, ohne entweder zu iterieren durch die Sammlung oder einfach nur wieder neu angelegt, wenn Sie wissen, alle Schlüssel/Wert-Paare, die Sie benötigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hätten Sie rekonstruiert die url und dann umleiten. So etwas wie dieses:
Sowieso, habe ich nicht getestet, oder etwas, aber es sollte funktionieren (oder zumindest bekommen Sie in thye richtige Richtung)
Können Sie vermeiden, berühren Sie die ursprüngliche query-string durch die Arbeit an einer Kopie statt. Sie können dann leiten Sie die Seite, auf der Sie eine url mit Ihrer modifizierten query-string, etwa so:
Update:
Stellt sich heraus, können wir den code vereinfachen, etwa so:
Ich quick hack, spart man wenig. Aber foo wird nicht anwesend sein, der code erwartet es in nextpge.aspx 🙂
Interessante Frage. Ich sehe keine echte alternative zu manuell kopieren Sie die Sammlung seit CopyTo wird, dass Sie nur die Werte (und nicht die Tasten).
Ich denke HollyStyles' Hack funktionieren würde (obwohl ich wäre nervös über die Umsetzung eine Ersetzen, die im QueryString - öbv. abhängig vom Anwendungsfall), aber es ist eine Sache, das stört mich..
Wenn die Ziel-Seite nicht zu Lesen, warum Sie brauchen, um es zu entfernen aus dem QueryString?
Wird es nur ignoriert?
Gelingt das nicht, ich denke, Sie würde müssen nur den sauren Apfel beißen, und erstellen Sie eine util-Methode zu ändern, die Kollektion für Sie.
UPDATE - Folgende Antwort von OP
Ahhhh! Ich sehe jetzt, ja, ich habe ähnliche Probleme mit SiteMap-Durchführung vollständiger Vergleich der Zeichenfolge.
Da der Wechsel zu der anderen source-code (also die Suche) steht außer Frage, ich würde wahrscheinlich sagen, es kann am besten sein zu tun Replace auf string. Obwohl um fair zu sein, wenn Sie Häufig auftreten-code ähnlich wie diese, es wäre ebenso einfach wie schnell eine utility-Funktion zum Klonen der Kollektion, wobei ein array von Werten die filter von es.
Diese Weise würden Sie nie sorgen zu machen über solche Fragen wieder 🙂
HttpUtility.ParseQueryString(Request.Url.Query)
Gegenzug istQueryStringValueCollection
. Es ist Erben vonNameValueCollection
.Einzige andere option ist ein regex ersetzen. Wenn Sie sicher wissen, die &Bezug ist in der Mitte der Sammlung irgendwo, lassen Sie das nachgestellte & in der regex, wenn Sie sicher wissen es am Ende fallen dann die trailing - & und ändern Sie die Ersatz-Zeichenfolge "&" zu String.Leer
Request.Url.GetLeftPart(UriPartial.Path)
sollte dies tunIch fand das war eine mehr elegante Lösung
Hier ist eine Lösung, die verwendet LINQ gegen die
Request.QueryString
die es ermöglicht komplexe Filterung der qs-Parameter, falls erforderlich.Das Beispiel unten zeigt mir das herausfiltern der
uid
param erstellen einen relativen url bereit für die Umleitung.Bevor:
http://www.domain.com/home.aspx?color=red&uid=1&name=bob
Nach:
~/home.aspx?color=red&name=bob
Entfernen QS-Parameter aus der url
Können Sie Klonen die Sammlung und dann umleiten auf die Seite mit den geklonten (und modifiziert) Sammlung?
Ich weiß, es ist nicht viel besser als die Iteration von...