ASP.NET MVC - Abrufen von QueryString-Werten


75

Sollten Sie unter ASP.NET MVC QueryString-Parameter genauso abrufen wie in ASP.NET WebForms? oder wird die [AcceptVerbs(HttpVerbs.Get)]deklaration irgendwie benutzt?

Antworten:


119

Abfragezeichenfolgenparameter können einfach mithilfe eines Arguments für die Aktion akzeptiert werden

public ActionResult Foo(string someValue, int someOtherValue) {...}

das wird eine Abfrage wie akzeptieren .../someroute?someValue=abc&someOtherValue=123

Ansonsten können Sie die Anfrage direkt nach mehr Kontrolle durchsuchen.


Verhindert dies Angriffe auf Abfragezeichenfolgen? wie jede Skriptinjektion?
Hamza Khanzada

Was ist in diesem Fall "Someroute"?
Igor Meszaros

32

Ich denke, was Sie suchen, ist

Request.QueryString["QueryStringName"]

und Sie können in Ansichten darauf zugreifen, indem Sie hinzufügen @

Schauen Sie sich jetzt mein Beispiel an. Ich habe mit QueryString eine URL generiert

 var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})';

Der listURL-Wert ist /Sector/List?name=value'

und wann queryStringist leer

listURL Wert ist /Sector/List


25

Sie können Request.QueryStringSammlungen immer wie Webformulare verwenden, MVC kann sie jedoch auch verarbeiten und als Parameter übergeben. Dies ist der vorgeschlagene Weg, da dies einfacher ist und der Eingabedatentyp automatisch überprüft wird.


7

Ich empfehle, die ValueProvider-Eigenschaft des Controllers zu verwenden, ähnlich wie UpdateModel / TryUpdateModel, um die erforderlichen Routen-, Abfrage- und Formularparameter zu extrahieren. Dadurch wird verhindert, dass Ihre Methodensignaturen möglicherweise sehr groß werden und häufigen Änderungen unterliegen. Dies erleichtert auch das Testen ein wenig, da Sie dem Controller während Unit-Tests einen ValueProvider zur Verfügung stellen können.


1

Tatsächlich können Sie Abfragezeichenfolgen in MVC auf zwei Arten erfassen .....

public ActionResult CrazyMVC(string knownQuerystring)
{

  // This is the known query string captured by the Controller Action Method parameter above
  string myKnownQuerystring = knownQuerystring;

  // This is what I call the mysterious "unknown" query string
  // It is not known because the Controller isn't capturing it
  string myUnknownQuerystring = Request.QueryString["unknownQuerystring"];

  return Content(myKnownQuerystring + " - " + myUnknownQuerystring);

}

Dies würde beide Abfragezeichenfolgen erfassen ... zum Beispiel:

/CrazyMVC?knownQuerystring=123&unknownQuerystring=456

Output: 123 - 456

Fragen Sie mich nicht, warum sie es so gestaltet haben. Sinnvoller wäre es, wenn sie das gesamte Controller-Aktionssystem für einzelne Abfragezeichenfolgen ausschalten und nur eine erfasste dynamische Liste aller Zeichenfolgen / codierten Dateiobjekte für die URL durch URL-Formularcodierung zurückgeben würden, sodass Sie problemlos auf alle in einem Aufruf zugreifen können . Vielleicht kann jemand hier das demonstrieren, wenn es möglich ist?

Für mich macht es keinen Sinn, wie Controller Abfragezeichenfolgen erfassen, aber es bedeutet, dass Sie mehr Flexibilität beim Erfassen von Abfragezeichenfolgen haben, als sie Ihnen sofort beibringen. Also wählen Sie Ihr Gift ... beide funktionieren gut.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.