Request.Form和Request.QueryString之间的区别?

Ram*_*ran 14 c# asp.net http request.form request.querystring

有人能告诉我Request.Form和之间的确切区别 Request.QueryString吗?

我知道一个区别,比如

如果HTTP请求方法是POST,则用户提交的数据位于 Request.Form()集合中

如果HTTP请求方法是GET,则用户提交的数据位于 Request.QueryString()集合中

还有其他区别吗?任何一个例子将不胜感激.

Adi*_*dil 21

Request.Form数据中是贴http头而在QueryString数据通过URL发送.


Ram*_*ran 14

我发现了一些其他的区别

Request("id") 
Run Code Online (Sandbox Code Playgroud)

将首先尝试找到

Request.Form("id") 
Run Code Online (Sandbox Code Playgroud)

然后

Request.Querystring("id") 
Run Code Online (Sandbox Code Playgroud)

然后

Request.Cookies("id") 
Run Code Online (Sandbox Code Playgroud)

最后

Request.ServerVariables("id") 
Run Code Online (Sandbox Code Playgroud)

建议尽可能使用显式命名约定,因为它更高效,更可读.它还使您能够确定信息来自何处,因为系统将在第一次命中后停止....它是如果指定信息的位置,系统也会更快.

我们可以参考此链接以获取更多详细信息:

http://www.hanselman.com/blog/ASPNETParamsCollectionVsQueryStringFormsVsRequestindexAndDoubleDecoding.aspx

但任何人都知道任何其他差异,我真的很感激.


uSe*_*AhA 7

如MSDN所述,

(Request.Form):Request.Form(element)的值是请求体中出现的元素的所有值的数组.您可以通过调用Request.Form(element).Count来确定参数的值的数量.如果参数没有与之关联的多个值,则计数为1.如果未找到该参数,则计数为0.

和(Request.QueryString):Request.QueryString(parameter)的值是QUERY_STRING中出现的所有参数值的数组.您可以通过调用Request.QueryString(parameter).Count来确定参数的值的数量.如果变量没有与之关联的多个数据集,则计数为1.如果未找到变量,则计数为0.

所以,有些事情需要注意:

在页面上的典型表单中,我们可能包含一些隐藏元素:

<form method="post">
   <input type="hidden" name="lol" value="cat" />
   <input type="text" />
</form>
Run Code Online (Sandbox Code Playgroud)

隐藏元素(如果内存服务)不会显示在QueryString.所以,我认为有一些东西没有显示出来Request.QueryString.不幸的是,我正在新机器上重新安装开发应用程序,目前无法对此进行测试,但如果我是对的,当您POST使用表单时,会发送有关表单及其内容的更多详细信息.当您访问时QueryString,您只看到构成整个URL的内容,例如:

http://somesite.com/index.html?v=1&NonHiddenElement=lol&ManualValue=hello