【问题标题】:Difference between Request.QueryString["id"] and Request["id"]Request.QueryString["id"] 和 Request["id"] 的区别
【发布时间】:2010-08-10 11:31:49
【问题描述】:

谁能告诉我两者之间有什么区别:

Request.QueryString["id"] 和 Request["id"]

如果是,哪个更好用?

【问题讨论】:

    标签: c# asp.net query-string


    【解决方案1】:

    Request["id"] 从 QueryString、Form、Cookies 或 ServerVariables 集合中获取值。文档中没有指定搜索它们的顺序,但是当您查看源代码时,您会发现它是它们被提及的顺序。

    因此,如果您知道变量所在的位置(通常会这样做),最好使用更具体的选项。

    【讨论】:

    • -1 从我这里,因为文档没有指定访问集合的顺序。如果文档与实现匹配,那纯粹是运气,正如我在回答中指出的那样,它可能会改变。删除“按此顺序”,我很乐意删除 -1 =)
    • -1 已删除,msdn.microsoft.com/en-us/library/ms524948%28VS.90%29.aspx 处还有另一部分文档(感谢@John 的回答指出),表明集合是按特定顺序搜索的。如果 MS 在专门针对 Request.Item 的文档中提到这一点,那就太好了,嗯! :-/
    • 我删除了“按此顺序”部分,因为这是未记录的。但是,查看源代码,您会发现它使用指定的顺序。但你是对的,这是一个实现细节:)
    • 现在是 +1。到此结束时,可怜的 StackOverflow 投票仓鼠将筋疲力尽! ;=)
    • 浏览这个,我正在考虑一个 -1,因为它现在说它是无证的,而实际上它是。
    【解决方案2】:

    Request 集合是 QueryString 的超集,还有一些与当前请求相关的数据。

    至于“更好” - 我建议您准确和明确(即使用 QueryString)以避免意外因素,当您得到意外结果只是意识到您使用了给定请求的密钥没有提供查询字符串值,但它存在于其他集合中。

    【讨论】:

    • +1 用于回答整个问题。当最终从 cookie 而不是查询字符串中读取某些内容时,我当然看到代码会感到困惑。
    【解决方案3】:

    根据documentationHttpRequest索引器

    查询字符串、表单、Cookie 或 ServerVariables 集合成员 在 key 参数中指定。

    我更喜欢使用Request.QueryString["id"],因为它更明确了值的来源。

    【讨论】:

      【解决方案4】:

      Request.QueryString["id"] 查看每个 QueryString 传递的集合。 Request.Item["id"] 查看所有集合(QueryString、Form、Cookie 或 ServerVariables)。因此,应尽可能首选 QueryString 属性,因为它更小。

      【讨论】:

        【解决方案5】:

        根据 Reflector.Net,Request["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;
            }
        }
        

        【讨论】:

        • @Rob 与依赖文档相反。你会相信哪个? :)
        • @bzlm,搜索顺序是未记录的,因此依赖它充其量是不明智的,最坏的情况可能是灾难性的。如果某些内容没有记录在案,您必须假设它随时可能更改。
        • 搜索顺序已记录。
        • @Rob 我的错,这暗示了这是文档中给出的顺序,但没有明确说明这是使用的顺序。现在,当人们考虑它时,它是唯一合理的顺序,它建立在“经典” ASP 中记录的特性之上,但你是对的,它并不明确。 IMO 文档中的一个缺陷。
        • @Jon,当我看到指向经典 asp 文档的错误链接时,我首先想到的是(MS 已将其放在摘要页面上,而 不是 HttpRequest.Item页)。我同意这是唯一合理的顺序,并且 是 暗示的,但是相信实现细节已经让我有足够的时间从那个错误中吸取教训 =)
        【解决方案6】:

        Request.QueryString["id"] 将返回查询字符串中具有 id 键的项的值,而 Request["id"] 将返回来自 Request.QueryString、Request.Form、Request.Cookies 或Request.ServerVariables。

        值得一提的是,Request.Item 的 documentation(这是您在调用 Request["id"] 时实际访问的内容)没有指定搜索集合的顺序,因此理论上您可能会收到不同的结果,具体取决于您运行的 asp.net 版本。

        如果你知道你想要的值在你的查询字符串中,最好使用Request.QueryString["id"]来访问它,而不是Request["id"]。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多