it-swarm.com.de

Wie kann ich mit c # Elemente aus dem Querystring in asp.net entfernen?

Ich möchte "Language" Querystring von meiner URL entfernen. Wie kann ich das machen ? (mit Asp.net 3.5, c #)

Default.aspx?Agent=10&Language=2

Ich möchte "Language = 2" entfernen, aber die Sprache wäre die erste, mittlere oder letzte. also werde ich das haben

Default.aspx?Agent=20
52
Barbaros Alp

Ich habe vor einiger Zeit ein ähnliche Frage beantwortet. Im Grunde wäre es am besten, die Klasse HttpValueCollection zu verwenden, die eigentlich die QueryString -Eigenschaft ist. Leider ist sie intern im .NET-Framework .. __ Sie können Reflector verwenden, um sie zu packen (und sie in Ihre Utils-Klasse zu platzieren). Auf diese Weise können Sie die Abfragezeichenfolge wie eine NameValueCollection bearbeiten, wobei jedoch alle Probleme mit der URL-Codierung/-Dekodierung berücksichtigt wurden.

HttpValueCollection erweitert NameValueCollection und verfügt über einen Konstruktor, der eine verschlüsselte Abfragezeichenfolge (einschließlich Et-Zeichen und Fragezeichen) akzeptiert, und überschreibt eine ToString()-Methode, um die Abfragezeichenfolge später aus der zugrunde liegenden Auflistung neu zu erstellen.

10
Igal Tabachnik

Wenn es sich um HttpRequest.QueryString handelt, können Sie die Auflistung in eine beschreibbare Auflistung kopieren und sich damit auskennen.

NameValueCollection filtered = new NameValueCollection(request.QueryString);
filtered.Remove("Language");
113
xcud

Hier ist ein einfacher Weg. Reflektor wird nicht benötigt.

    public static string GetQueryStringWithOutParameter(string parameter)
    {
        var nameValueCollection = System.Web.HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString());
        nameValueCollection.Remove(parameter);
        string url = HttpContext.Current.Request.Path + "?" + nameValueCollection;

        return url;
    }

Hier ist QueryString.ToString() erforderlich, da Request.QueryString collection nur gelesen werden kann.

44

Endlich,

hmemcpy antwort war total für mich und danke an andere freunde die geantwortet haben.

Ich schnappe mir die HttpValueCollection mit Reflector und schrieb den folgenden Code

        var hebe = new HttpValueCollection();
        hebe.Add(HttpUtility.ParseQueryString(Request.Url.Query));

        if (!string.IsNullOrEmpty(hebe["Language"]))
            hebe.Remove("Language");

        Response.Redirect(Request.Url.AbsolutePath + "?" + hebe );
36
Barbaros Alp

Meine persönliche Präferenz hier ist das Umschreiben der Abfrage oder das Arbeiten mit einer Namevaluecollection an einem niedrigeren Punkt, aber in manchen Fällen macht die Geschäftslogik keine dieser Faktoren sehr hilfreich, und manchmal ist eine Reflexion das, was Sie brauchen. Unter diesen Umständen können Sie einfach die Readonly-Flagge für einen Moment wie folgt deaktivieren:

// reflect to readonly property
PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

// make collection editable
isreadonly.SetValue(this.Request.QueryString, false, null);

// remove
this.Request.QueryString.Remove("foo");

// modify
this.Request.QueryString.Set("bar", "123");

// make collection readonly again
isreadonly.SetValue(this.Request.QueryString, true, null);
26
annakata

Versuche dies ...

PropertyInfo isreadonly   =typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);    

isreadonly.SetValue(this.Request.QueryString, false, null);
this.Request.QueryString.Remove("foo");
3
Vishal Nayan
  1. Erfassen Sie Ihre Abfragezeichenfolge mithilfe von HttpContext.Request.QueryString. Der Standardwert ist NameValueCollection.
  2. Umwandeln Sie es in eine Zeichenfolge und verwenden Sie System.Web.HttpUtility.ParseQueryString(), um die Abfragezeichenfolge zu analysieren (die erneut eine NameValueCollection zurückgibt).
  3. Sie können dann die Funktion Remove() verwenden, um den bestimmten Parameter zu entfernen (verwenden Sie die Taste, um auf den zu entfernenden Parameter zu verweisen).
  4. Verwenden Sie die Abfrageparameter zurück in eine Zeichenfolge, und formatieren Sie die Abfragezeichenfolge mit string.Join() als etwas, das von Ihrer URL als gültige Abfrageparameter lesbar ist.

Ein Arbeitsbeispiel finden Sie unten, wobei param_to_remove der Parameter ist, den Sie entfernen möchten.

Angenommen, Ihre Abfrageparameter sind param1=1&param_to_remove=stuff&param2=2. Führen Sie die folgenden Zeilen aus:

var queryParams = System.Web.HttpUtility.ParseQueryString(HttpContext.Request.QueryString.ToString());
queryParams.Remove("param_to_remove");
string queryString = string.Join("&", queryParams.Cast<string>().Select(e => e + "=" + queryParams[e]));

Jetzt sollte Ihre Abfragezeichenfolge param1=1&param2=2 sein.

1
Blairg23

Sie machen nicht klar, ob Sie versuchen, den Querystring im Request-Objekt zu ändern. Da diese Eigenschaft schreibgeschützt ist, nehmen wir an, Sie möchten sich nur mit der Zeichenfolge befassen.

... In diesem Fall ist es grenzwertig.

  • schnappen Sie sich die Abfrage von der Anfrage
  • .split () auf '&'
  • füge es wieder zu einer neuen Zeichenfolge zusammen und schnüffle nach etwas, das mit "Sprache" beginnt
1
Jason Kester

Rufen Sie die Querystring-Auflistung ab, parsen Sie sie in eine Zeichenfolge (name=value pair), ausgenommen diejenige, die Sie entfernen möchten, und nennen Sie sie newQueryString

Dann rufen Sie Response.Redirect(known_path?newqueryString) auf.

1
Pita.O

Analysiert Querystring in eine NameValueCollection. Einen Gegenstand entfernen. Und verwende den toString, um ihn wieder in einen Querystring umzuwandeln.

using System.Collections.Specialized;

NameValueCollection filteredQueryString = System.Web.HttpUtility.ParseQueryString(Request.QueryString.ToString());
filteredQueryString.Remove("appKey");

var queryString = '?'+ filteredQueryString.ToString();
0
Kurkula

nun, ich habe eine einfache Lösung, aber es ist ein wenig Javascript involviert.

angenommen, die Abfragezeichenfolge ist "ok = 1".

    string url = Request.Url.AbsoluteUri.Replace("&ok=1", "");
   url = Request.Url.AbsoluteUri.Replace("?ok=1", "");
  Response.Write("<script>window.location = '"+url+"';</script>");
0
Segev Dagan

Wenn Sie bereits eine Abfragezeichenfolge als Zeichenfolge haben, können Sie auch die einfache Zeichenfolgenbearbeitung verwenden:

int pos = queryString.ToLower().IndexOf("parameter=");
if (pos >= 0)
{
    int pos_end = queryString.IndexOf("&", pos);
    if (pos_end >= 0)   // there are additional parameters after this one
        queryString = queryString.Substring(0, pos) + queryString.Substring(pos_end + 1);
    else
        if (pos == 0) // this one is the only parameter
            queryString = "";
        else        // this one is the last parameter
            queryString=queryString.Substring(0, pos - 1);
}
0
Pedro Geada

Möglicherweise möchten Sie einen regulären Ausdruck verwenden, um den Parameter zu finden, den Sie aus der Querzeichenfolge entfernen möchten. Dann entfernen Sie ihn und leiten den Browser mit derselben neuen Querzeichenfolge in dieselbe Datei um.

0
RKitson

Ja, in .NET sind keine Klassen zum Bearbeiten von Abfragezeichenfolgen integriert. Sie müssen entweder Regex oder eine andere Methode zum Ändern der Zeichenfolge selbst verwenden. 

0
David Morton
string queryString = "Default.aspx?Agent=10&Language=2"; //Request.QueryString.ToString();
string parameterToRemove="Language";   //parameter which we want to remove
string regex=string.Format("(&{0}=[^&\s]+|{0}=[^&\s]+&?)",parameterToRemove);
string finalQS = Regex.Replace(queryString, regex, "");

https://regexr.com/3i9vj

0
yajiv