Запрос ["ключ"] против Request.Params ["ключ"] против Request.QueryString ["ключ"] - PullRequest
70 голосов
/ 22 февраля 2010

Request["key"] против Request.Params["key"] против Request.QueryString["key"]

Какой метод вы используете опытные программисты?а почему?

Ответы [ 5 ]

116 голосов
/ 22 февраля 2010

Я рекомендую Request.QueryString["key"]. Нет большой разницы с Request["Key"] для строки запроса, но есть большая (er) разница, если вы пытаетесь получить значение из ServerVariables. Request["Key"] ищет значение в QueryString, если ноль, оно смотрит на Form, затем Cookie и, наконец, ServerVariables.

Использование Params является самым дорогостоящим. Первый запрос к params создает новый NameValueCollection и добавляет каждый из QueryString, Form, Cookie и ServerVariables к этой коллекции. Для второго запроса он более производительный, чем Request["Key"].

Сказав, что разница в производительности для пары ключей весьма незначительна. Ключевым моментом здесь является то, что код должен показывать намерение, а использование Request.QueryString проясняет ваше намерение.

21 голосов
/ 22 февраля 2010

Я предпочитаю использовать Request.QueryString["key"], потому что это помогает читателю кода точно знать , откуда вы получаете данные. Я не использую Request.Params["key"], потому что он может ссылаться на cookie, строку запроса и некоторые другие вещи; поэтому пользователь должен немного подумать. Чем меньше времени нужно выяснить, о чем вы думаете, тем легче поддерживать код.

7 голосов
/ 22 февраля 2010

HttpRequest.Params или Request.Params получает практически все (строку запроса, форму, cookie и переменные сеанса) из httprequest, тогда как Request.Querystring только извлекает строку запроса ... все зависит от того, что вы делаете в данный момент .

4 голосов
/ 22 февраля 2010

Я всегда явно указываю коллекцию. Если по какой-либо причине вы хотите разрешить переопределения, напишите для каждого из них «get» и напишите некоторый понятный код, который показывает вашу иерархию для выбора одного над другим. ИМО, мне не нравится получать значение из нескольких источников без четкой деловой причины для этого.

0 голосов
/ 06 июня 2017

В качестве любезного уведомления, если вы установите requestValidationMode = "4.5" в web.config, оба Request.QueryString [“key”] и Request [“key”] будет использовать поведение« отложенной загрузки »в качестве дизайна.

Однако, каким-то образом Request.Params [« key »] все равно будет запускать проверку как поведение 4.0.

Это странное поведение очень долго меня смущало.

...