为了更清楚地演示这们的差别,请看以下示例代码:
- <body>
- <p>Item结果:<%= this.ItemValue %></p>
- <p>Params结果:<%= this.ParamsValue %></p>
- <hr />
- <form action="<%= Request.RawUrl %>" method="post">
- <input type="text" name="name" value="123" />
- <input type="submit" value="提交" />
- </form>
- </body>
- public partial class ShowItem : System.Web.UI.Page
- {
- protected string ItemValue;
- protected string ParamsValue;
- protected void Page_Load(object sender, EventArgs e)
- {
- string[] allkeys = Request.QueryString.AllKeys;
- if( allkeys.Length == 0 )
- Response.Redirect("ShowItem.aspx?name=abc", true);
- ItemValue = Request["name"];
- ParamsValue = Request.Params["name"];
- }
- }
页面在未提交前浏览器的显示:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/7/AA95414175.gif" />
点击提交按钮后,浏览器的显示:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/7/EE95414989.gif" />
差别很明显,我也不多说了。说下我的建议吧:尽量不要使用Params,不光是上面的结果导致的判断问题,没必要多创建一个集合出来吧,而且更糟糕的是写Cookie后,也会更新集合。
HttpRequest还有二个很【低调】的属性:InputStream, Filter ,这二位的能量很巨大,却不经常被人用到。
HttpResponse也有这二个对应的属性,本文的后面部分将向您展示它们的强大功能。
HttpResponse
我们处理HTTP请求的最终目的只有一个:向客户端返回结果。而所有需要向客户端返回的操作都要调用HttpResponse的方法。它提供的功能集中在操作HTTP响应部分,如:响应流,响应头。
我把一些认为很重要的成员简单列举了一下:
- // 获取网页的缓存策略(过期时间、保密性、变化子句)。
- public HttpCachePolicy Cache { get;}
- // 获取或设置输出流的 HTTP MIME 类型。默认值为“text/html”。
- public string ContentType { get;set;}
- // 获取响应 Cookie 集合。
- public HttpCookieCollection Cookies { get;}
- // 获取或设置一个包装筛选器对象,该对象用于在传输之前修改 HTTP 实体主体。
- public Stream Filter { get;set;}
- // 启用到输出 Http 内容主体的二进制输出。
- public Stream OutputStream { get;}
- // 获取或设置返回给客户端的输出的 HTTP 状态代码。默认值为 200 (OK)。
- public int StatusCode { get;set;}
- // 将 HTTP 头添加到输出流。
- public void AppendHeader(string name, string value);
- // 将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发EndRequest事件。
- public void End();
- // 将客户端重定向到新的 URL。指定新的 URL 并指定当前页的执行是否应终止。
- public void Redirect(string url, bool endResponse);
- // 将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。
- public void TransmitFile(string filename);
- // 将 System.Object 写入 HTTP 响应流。
- public void Write(object obj);
这