Ich habe eine Zeichenfolge in .NET, die eigentlich eine URL ist. Ich möchte einen einfachen Weg, um den Wert von einem bestimmten Parameter zu erhalten.
Normalerweise würde ich nur verwenden Request.Params["theThingIWant"]
, aber diese Zeichenfolge stammt nicht aus der Anforderung. Ich kann einen neuen Uri
Artikel wie folgt erstellen :
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Ich kann verwenden myUri.Query
, um die Abfragezeichenfolge abzurufen ... aber dann muss ich anscheinend eine reguläre Methode finden, um sie aufzuteilen.
Vermisse ich etwas Offensichtliches oder gibt es keine eingebaute Möglichkeit, dies zu tun, ohne eine Art regulären Ausdruck usw. zu erstellen?
HttpUtility.ParseQueryString(myUri.Query).Get(0)
und es wird den ersten Parameter extrahieren. `HttpUtility.ParseQueryString(string)
! Wie der Name schon sagt, werden Abfragezeichenfolgen analysiert, keine URLs mit Abfrageparametern. Wenn Sie dies tun möchten, müssen Sie es zuerst folgendermaßen aufteilen?
:Url.Split('?')
und das letzte Element mithilfe von (je nach Situation und Bedarf)[0]
oder LINQsLast()
/ abrufenLastOrDefault()
.Dies ist wahrscheinlich was Sie wollen
quelle
Hier ist eine weitere Alternative, wenn Sie sie aus irgendeinem Grund nicht verwenden können oder wollen
HttpUtility.ParseQueryString()
.Dies ist so konstruiert, dass es gegenüber "fehlerhaften" Abfragezeichenfolgen etwas tolerant ist, dh es
http://test/test.html?empty=
wird ein Parameter mit einem leeren Wert. Der Anrufer kann die Parameter bei Bedarf überprüfen.Prüfung
quelle
@ Andrew und @ CZFox
Ich hatte den gleichen Fehler und fand die Ursache darin, dass der Parameter eins tatsächlich ist:
http://www.example.com?param1
und nichtparam1
, was man erwarten würde.Durch Entfernen aller Zeichen vor und einschließlich des Fragezeichens wird dieses Problem behoben. Im Wesentlichen
HttpUtility.ParseQueryString
erfordert die Funktion nur einen gültigen Abfragezeichenfolgenparameter, der nur Zeichen nach dem Fragezeichen enthält, wie in:Meine Problemumgehung:
quelle
ParseQueryString
analysiert Abfragezeichenfolgen.Sieht so aus, als sollten Sie die Werte von
myUri.Query
durchlaufen und von dort aus analysieren.Ich würde diesen Code jedoch nicht verwenden, ohne ihn auf einer Reihe von fehlerhaften URLs zu testen. Es könnte bei einigen / allen dieser Probleme auftreten:
hello.html?
hello.html?valuelesskey
hello.html?key=value=hi
hello.html?hi=value?&b=c
quelle
Sie können die folgende Problemumgehung verwenden, um auch mit dem ersten Parameter zu arbeiten:
quelle
Verwenden Sie .NET Reflector, um die
FillFromString
Methode von anzuzeigenSystem.Web.HttpValueCollection
. Dadurch erhalten Sie den Code, mit dem ASP.NET dieRequest.QueryString
Sammlung füllt .quelle
Oder wenn Sie die URL nicht kennen (um Hardcodierung zu vermeiden, verwenden Sie die
AbsoluteUri
Beispiel ...
quelle
Wenn Sie möchten, dass Ihr QueryString auf der Standardseite angezeigt wird. Die Standardseite bezeichnet Ihre aktuelle Seiten-URL. Sie können diesen Code ausprobieren:
quelle
Das ist eigentlich sehr einfach und das hat bei mir funktioniert :)
quelle
Für alle, die alle Abfragezeichenfolgen einer Zeichenfolge durchlaufen möchten
quelle
quelle
Ich habe es benutzt und es läuft perfekt
quelle