Разница между Request.QueryString ["id"] и Request ["id"] - PullRequest
7 голосов
/ 10 августа 2010

Может кто-нибудь сказать мне, есть ли разница между:

Request.QueryString["id"] и Request["id"]

Если да, какой из них лучше использовать?

Ответы [ 6 ]

13 голосов
/ 10 августа 2010

Request["id"] получает значение из коллекций QueryString, Form, Cookies или ServerVariables. Порядок их поиска не указан в документации, но когда вы посмотрите на исходный код, вы увидите, что это порядок, в котором они упоминаются.

Так что, если вы знаете, где находится ваша переменная, что вы обычно делаете, лучше использовать более конкретную опцию.

3 голосов
/ 10 августа 2010

Коллекция запросов представляет собой расширенный набор QueryString вместе с некоторыми другими данными, относящимися к текущему запросу.

так же, как и для «лучше» - я бы посоветовал вам быть точным и явным (то есть использовать QueryString), чтобы избежать фактора неожиданности, когда вы получаете неожиданные результаты, просто чтобы понять, что вы использовали ключ, для которого данный запрос не предоставил значение строки запроса, но оно существует в некоторой другой коллекции.

1 голос
/ 10 августа 2010

Согласно Reflector.Net, запрос ["id"] определяется как:

public string this[string key]
{
    get
    {
        string str = this.QueryString[key];
        if (str != null)
        {
            return str;
        }
        str = this.Form[key];
        if (str != null)
        {
            return str;
        }
        HttpCookie cookie = this.Cookies[key];
        if (cookie != null)
        {
            return cookie.Value;
        }
        str = this.ServerVariables[key];
        if (str != null)
        {
            return str;
        }
        return null;
    }
}
1 голос
/ 10 августа 2010

Request.QueryString ["id"] просматривает коллекцию, переданную для QueryString. Request.Item ["id"] просматривает все коллекции (QueryString, Form, Cookies или ServerVariables). Поэтому свойство QueryString должно быть предпочтительным, когда это возможно, потому что оно меньше.

1 голос
/ 10 августа 2010

Согласно документации индексатор HttpRequest

Член коллекции QueryString, Form, Cookies или ServerVariables, указанный в параметре ключа.

Я бы предпочел использовать Request.QueryString["id"], так как это более явно, откуда берется значение.

1 голос
/ 10 августа 2010

Request.QueryString["id"] вернет значение элемента в строке запроса с ключом id, тогда как Request["id"] вернет элемент из одного из Request.QueryString, Request.Form, Request.Cookies илиRequest.ServerVariables.

Стоит отметить, что документация для Request.Item (к которой вы фактически обращаетесь, когда звоните Request["id"]), не укажите порядок, в котором будет выполняться поиск в коллекциях, чтобы теоретически вы могли получить другой результат в зависимости от того, на какой версии asp.net вы работаете.

Если вы знаете что вы хотите указать значение в строке запроса, всегда лучше использовать Request.QueryString["id"] для доступа к нему, а не Request["id"].

...