Request["key"]
vs Request.Params["key"]
vs Request.QueryString["key"]
Zapytanie [ "klucz"] vs Request.Params [ "klucz"] vs Request.QueryString [ "klucz"]
Która metoda nie wy, doświadczeni programiści użyciu? i dlaczego?
Request["key"]
vs Request.Params["key"]
vs Request.QueryString["key"]
Zapytanie [ "klucz"] vs Request.Params [ "klucz"] vs Request.QueryString [ "klucz"]
Która metoda nie wy, doświadczeni programiści użyciu? i dlaczego?
Polecam Request.QueryString["key"]
. Nie ma dużej różnicy w stosunku do Request["Key"]
dla ciągu zapytania, ale istnieje duża (duża) różnica, jeśli próbujesz uzyskać wartość od ServerVariables
. Request["Key"]
szuka wartości w QueryString
, jeśli wartość jest pusta, wygląda na Form
, następnie Cookie
i na koniec ServerVariables
.
Korzystanie z Params
jest najbardziej kosztowne. Pierwsze żądanie dla params tworzy nowe NameValueCollection
i dodaje do tej kolekcji każdy z QueryString
, , ,Dla drugiego żądania jest bardziej wydajny niż Request["Key"]
.
Powiedziawszy, że różnica wydajności dla kilku kluczy jest dość pomijalna. Kluczem jest tutaj kod powinien wskazywać intencje i używanie Request.QueryString
wyjaśnia, co masz zamiar.
Zawsze wyraźnie określam kolekcję. Jeśli z jakiegoś powodu chcesz zezwolić na przesłonięcia, zakoduj "otrzymaj" dla każdego z nich i napisz jakiś wyraźny kod, który pokazuje twoją hierarchię do wyboru jednej nad drugą. IMO, nie podoba mi się uzyskanie wartości z wielu źródeł bez wyraźnego powodu biznesowego.
Preferuję używać Request.QueryString["key"]
, ponieważ pomaga to czytnikowi kodów wiedzieć, dokładnie skąd pochodzą dane. Zwykle nie używam Request.Params["key"]
, ponieważ może to odnosić się do cookie, ciągu zapytania i kilku innych rzeczy; więc użytkownik musi trochę pomyśleć. Im mniej czasu ktoś potrzebuje, aby dowiedzieć się, co myślisz, tym łatwiej jest utrzymać kod.
Myślę, że kwestia jest naprawdę "skąd" dane pochodzą. Dobrze jest używać 'Request.Params [" key "]' tak długo, jak długo nie obchodzi cię, czy pochodzi on z łańcucha zapytania, czy gdzieś indziej. –
Jeśli wiesz, która kolekcja zawiera wartość, spójrz tam. Bezużyteczność sprawia, że obiekt żądania przeszukuje wszystkie zbiory (ze względu na wydajność, jeśli nic więcej). – DaveB
@Will Vousden. Niezły punkt. Twoje zdanie jest bardzo prawdziwe, kiedy po raz pierwszy piszesz kod, a pomysł jest świeży w twojej głowie. Fast-Forward dwa lata od teraz - masz paskudny błąd, kod jest bardzo owłosiony/złożony i po prostu chcesz skupić się na naprawianiu problemu! Nie musisz szukać polowania na znaczenie zmiennej wypełnionej "Żądaj.Params ["key"] "(ciąg zapytania, zmienna sesji lub coś innego) może sprawić, że rzeczy będą odrobinę łatwiejsze. Nie jest to ani wielkie, ani przerywane i zawsze możesz je wyszukać, ale takie małe rzeczy idą długo – Phil
HttpRequest.Params
lub Request.Params
dostaje prawie wszystko (kwerendy, formularza, ciasteczka i zmiennych sesyjnych) od HttpRequest, natomiast Request.Querystring
tylko będzie ciągnąć ciągu kwerendy ... Wszystko zależy od tego, co robisz w danym momencie.
Jako uprzejmie powiadomienia Jeśli ustawisz requestValidationMode = "4.5" pod web.config, zarówno Request.QueryString [ „klucz”] i Zapytanie [ „klucz”] użyje "lazy loading" zachowanie jako projekt.
Jednak w jakiś sposób Prośba.Params ["klucz"] nadal będzie wyzwalać sprawdzanie poprawności jako zachowanie 4.0.
To dziwne zachowanie bardzo mnie martwi od dłuższego czasu.
+1 za wchodzenie w szczegóły i rozumowanie – Phil
Dzięki, właśnie odpowiedziałeś na moje pytanie, dlaczego wartości ciasteczek wyskakują z mojej prośby.Params [indeks] . – ProfK
Wspaniale, że zauważyłeś, że nowa kolekcja NameValue jest utworzona na pierwsze połączenie, teraz mój błąd i ślad stosu ma sens :) – SwissCoder