2010-02-22 1 views

Antwort

110

Ich empfehle Request.QueryString["key"]. Es gibt keinen großen Unterschied zu Request["Key"] für eine Abfragezeichenfolge, aber es gibt einen großen Unterschied, wenn Sie versuchen, den Wert von ServerVariables zu erhalten. Request["Key"] sucht nach einem Wert in QueryString wenn null, es sieht Form, dann Cookie und schließlich ServerVariables.

Die Verwendung von Params ist die teuerste. Die erste Anfrage an params erstellt eine neue NameValueCollection und fügt jede der QueryString, Form, Cookie und ServerVariables dieser Sammlung hinzu. Für die zweite Anfrage ist es performanter als Request["Key"].

Nachdem gesagt, dass der Leistungsunterschied für ein paar Schlüssel ziemlich vernachlässigbar ist. Der Schlüssel hier ist Code sollte Absicht zeigen und mit Request.QueryString macht es klar, was Ihre Absicht ist.

+4

+1 für Details und Sinn machen – Phil

+0

Danke, Sie haben gerade meine Frage beantwortet, warum Cookie-Werte aus meinem Request.Params [index] hervorgehen. – ProfK

+0

Schön, dass Sie zur Kenntnis genommen haben, dass eine neue NameValueCollection erstellt wird erster Aufruf, jetzt macht mein Fehler und Stack-Trace Sinn :) – SwissCoder

4

Ich spezifiziere immer die Sammlung explizit. Wenn Sie aus irgendeinem Grund Überschreibungen zulassen möchten, codieren Sie das "Get" für jeden einzelnen Code und schreiben Sie einen eindeutigen Code, der Ihre Hierarchie für die Auswahl eines anderen anzeigt. IMO, ich mag es nicht, einen Wert aus mehreren Quellen zu bekommen, ohne einen klaren geschäftlichen Grund dafür zu haben.

21

Ich bevorzuge die Verwendung Request.QueryString["key"], weil es hilft, den Code-Leser genau kennen, woher Sie die Daten erhalten. Ich neige dazu, Request.Params["key"] nicht zu verwenden, weil es sich auf einen Cookie, eine Abfragezeichenfolge und einige andere Dinge beziehen könnte; also muss der Benutzer ein wenig nachdenken. Je weniger Zeit benötigt wird, um herauszufinden, was Sie denken, desto einfacher ist es, den Code zu pflegen.

+1

Ich denke, das Problem ist wirklich "wo" die Daten herkommen. Es ist in Ordnung, 'Request.Params [" key "]' 'zu verwenden, solange es Ihnen egal ist, ob es aus der Abfragezeichenfolge kommt oder von woanders. –

+0

Wenn Sie wissen, in welcher Sammlung der Wert enthalten ist, suchen Sie dort nach. Es ist nicht sinnvoll, das Request-Objekt nach allen Sammlungen durchsuchen zu lassen (aus Gründen der Performance, wenn nichts anderes). – DaveB

+0

@Will Vousden. Netter Punkt. Dein Punkt ist sehr wahr, wenn du zuerst den Code schreibst und die Idee in deinem Kopf frisch ist. Fast-Forward in zwei Jahren - Sie haben einen fiesen Bug, der Code ist sehr haarig/komplex und Sie wollen nur das Problem beheben! Sie müssen nicht nach der Bedeutung einer Variablen suchen, die mit "Request" gefüllt ist.Params ["key"] "(Abfragezeichenfolge, Sitzungsvariable oder etwas anderes) kann die Dinge ein bisschen einfacher machen. Es ist nicht riesig oder make-or-break und man kann immer nachsehen; aber kleine Dinge wie diese gehen sehr lange – Phil

6

HttpRequest.Params oder Request.Params bekommt fast alles (Abfragezeichenfolgeflag, Form, Cookie und Session-Variablen) aus der Httprequest, während Request.Querystring nur den Abfragezeichenfolgeflag ziehen wird ... alles hängt davon ab, was Sie zu der Zeit tun.

0

Als kindly Nachricht, wenn Sie requestValidationMode gesetzt = "4.5" unter web.config, beide Request.QueryString [ „key“] und Request [ „key“] wird "lazy loading" verwenden Verhalten als Design.

Aber irgendwie Request.Params ["Schlüssel"] wird noch Validierung als das Verhalten von 4.0 auslösen.

Dieses seltsame Verhalten verwirrt mich wirklich für eine lange Zeit.