• Request[]与Request.Params[] 差别


    Request[]与Request.Params[] ,这二个属性都可以让我们方便地根据一个KEY去【同时搜索】QueryString、Form、Cookies 或 ServerVariables这4个集合

    这二个属性唯一不同的是:Item是依次访问这4个集合,找到就返回结果,而Params是在访问时,先将4个集合的数据合并到一个新集合(集合不存在时创建), 然后再查找指定的结果。

    Request[]实现原理(.net源代码)

    // System.Web.HttpRequest
    /// <summary>Gets the specified object from the <see cref="P:System.Web.HttpRequest.QueryString" />, <see cref="P:System.Web.HttpRequest.Form" />, <see cref="P:System.Web.HttpRequest.Cookies" />, or <see cref="P:System.Web.HttpRequest.ServerVariables" /> collections.</summary>
    /// <returns>The <see cref="P:System.Web.HttpRequest.QueryString" />, <see cref="P:System.Web.HttpRequest.Form" />, <see cref="P:System.Web.HttpRequest.Cookies" />, or <see cref="P:System.Web.HttpRequest.ServerVariables" /> collection member specified in the <paramref name="key" /> parameter. If the specified <paramref name="key" /> is not found, then null is returned.</returns>
    /// <param name="key">The name of the collection member to get. </param>
    public string this[string key]
    {
        get
        {
            string text = this.QueryString[key];
            if (text != null)
            {
                return text;
            }
            text = this.Form[key];
            if (text != null)
            {
                return text;
            }
            HttpCookie httpCookie = this.Cookies[key];
            if (httpCookie != null)
            {
                return httpCookie.Value;
            }
            text = this.ServerVariables[key];
            if (text != null)
            {
                return text;
            }
            return null;
        }
    }

    Request.Params[]源码

    // System.Web.HttpRequest
    /// <summary>Gets a combined collection of <see cref="P:System.Web.HttpRequest.QueryString" />, <see cref="P:System.Web.HttpRequest.Form" />, <see cref="P:System.Web.HttpRequest.Cookies" />, and <see cref="P:System.Web.HttpRequest.ServerVariables" /> items.</summary>
    /// <returns>A <see cref="T:System.Collections.Specialized.NameValueCollection" /> object. </returns>
    public NameValueCollection Params
    {
        get
        {
            if (HttpRuntime.HasAspNetHostingPermission(AspNetHostingPermissionLevel.Low))
            {
                return this.GetParams();
            }
            return this.GetParamsWithDemand();
        }
    }
    // System.Web.HttpRequest
    private NameValueCollection GetParams()
    {
        if (this._params == null)
        {
            this._params = new HttpValueCollection(64);
            this.FillInParamsCollection();
            this._params.MakeReadOnly();
        }
        return this._params;
    }
    // System.Web.HttpRequest
    private void FillInParamsCollection()
    {
        this._params.Add(this.QueryString);
        this._params.Add(this.Form);
        this._params.Add(this.Cookies);
        this._params.Add(this.ServerVariables);
    }

     参考网页http://www.cnblogs.com/fish-li/archive/2011/12/06/2278463.html

  • 相关阅读:
    C#编写的windows程序随系统启动
    CentOS 6.0修改ssh远程连接端口
    C# 控件缩写大全+命名规范+示例
    记录点滴
    C++封装,继承,多态,友元
    策略模式
    OpenGL入门
    C++四种类型转换
    观察者模式Observer Pattern
    双向链表std::list和单向链表std::forward_list
  • 原文地址:https://www.cnblogs.com/imust2008/p/5407842.html
Copyright © 2020-2023  润新知