Request["key"]
против Request.Params["key"]
против Request.QueryString["key"]
Request [ "ключ"] против Request.Params [ "ключ"] против Request.QueryString [ "ключ"]
Какой метод Вы используете закаленные программисты? и почему?
Request["key"]
против Request.Params["key"]
против Request.QueryString["key"]
Request [ "ключ"] против Request.Params [ "ключ"] против Request.QueryString [ "ключ"]
Какой метод Вы используете закаленные программисты? и почему?
Я рекомендую Request.QueryString["key"]
. Нет большой разницы в Request["Key"]
для строки запроса, но есть большая разница (er), если вы пытаетесь получить значение от ServerVariables
. Request["Key"]
ищет значение в QueryString
если null, то он выглядит Form
, затем Cookie
и, наконец, ServerVariables
.
Использование Params
является самым дорогостоящим. Первый запрос к параметрам создает новый NameValueCollection
и добавляет каждый из QueryString
, Form
, Cookie
и ServerVariables
к этой коллекции. Второй запрос на него более эффективен, чем Request["Key"]
.
Сказав, что разница в производительности для пары ключей довольно небрежна. Ключ здесь - это код, который должен показывать намерение, а использование Request.QueryString
дает понять, каковы ваши намерения.
Я всегда четко указываю коллекцию. Если по какой-то причине вы хотите разрешить переопределения, код «получить» для каждого из них и написать четкий код, который показывает вашу иерархию для выбора одного над другим. IMO, мне не нравится получать ценность из нескольких источников без четкой бизнес-причины для этого.
Я предпочитаю использовать Request.QueryString["key"]
, потому что он помогает знать код точно, откуда вы получаете данные. Я не хочу использовать Request.Params["key"]
, потому что он может ссылаться на файл cookie, строку запроса и несколько других вещей; поэтому пользователю нужно немного подумать. Чем меньше времени кому-то нужно выяснить, что вы думаете, тем легче поддерживать код.
Я думаю, что проблема действительно «где» данные поступают. Хорошо использовать 'Request.Params [" key "]', пока вам наплевать, выходит ли он из строки запроса или откуда-то еще. –
Если вы знаете, какая коллекция содержит значение, посмотрите там. Без использования объекта Request искать все коллекции (по соображениям производительности, если ничего другого). – DaveB
@Will Vousden. Хороший момент. Ваша точка зрения очень верна, когда вы впервые пишете код, и идея свежа в вашей голове. Быстрая перемотка вперед через два года - у вас неприятная ошибка, код очень волосатый/сложный, и вы просто хотите сосредоточиться на устранении проблемы! Не нужно делать охоту за значением переменной, заполненной «Запросом».Params ["key"] "(строка запроса, переменная сеанса или что-то еще) могут сделать вещи немного проще. Это не огромная или незаметная, и вы всегда можете ее найти, но такие мелочи долго – Phil
HttpRequest.Params
или Request.Params
получает почти все (строки запроса, формы, печенье и переменные сеанса) от HTTPRequest, в то время как Request.Querystring
только потянет ... все строки запроса зависит от того, что вы делаете в данный момент.
Как любезно уведомление, если вы установите requestValidationMode = "4,5" под web.config, как Request.QueryString [ «ключ»] и Request [ «ключ»] будут использовать "ленивую загрузку" поведение как дизайн.
Однако, как-то Request.Params ["key"] по-прежнему вызывает проверку как поведение 4.0.
Это странное поведение действительно смущает меня в течение длительного времени.
+1 для того, чтобы вдаваться в детали и сделать смысл. – Phil
Спасибо, вы просто ответили на мой вопрос о том, почему значения cookie выходят из моего запроса.Params [index]. – ProfK
Отлично, что вы отметили, что новый NameValueCollection создается на первый звонок, теперь моя ошибка и трассировка стека имеют смысл :) – SwissCoder