我正在阅读有关asp.net网页2的一些教程,我发现了令人困惑的内容
<form method="post">
@Html.ValidationSummary()
<div>
<label for="coursename">Course name: </label>
<input type="text" name="coursename" value="@Request["coursename"]" />
@Html.ValidationMessage("coursename")
</div>
...
它是&#34;正确&#34;在这种情况下使用请求[&#34; fieldname&#34;]而不是Request.Form [&#34; fieldname&#34;]?我理解(请更正错误)请求还将检查查询字符串中的字段,而request.form只会在表单的字段中进行检查。
这可能造成任何类型的错误/安全问题......是对请求的好坏使用......?
答案 0 :(得分:2)
使用Request.Form或只是Request来从QueryString中提取值是正确的。您可能遇到的唯一问题是,如果您有一个具有相同名称的查询字符串和表单字段。在这两种情况下,您应该已经在测试和验证服务器上的数据以处理任何错误。用户可以在它到服务器之前编辑Request.Form对象,就像编辑查询字符串一样简单。至少你应该:
<input type="text" name="coursename" value="@Server.UrlEncode(Request["coursename"])" />
当将值映射到在控制器中运行的操作的参数时,ASP.Net MVC默认使用Request方法。因此,微软似乎足以使用Request [“coursename”]。
答案 1 :(得分:2)
如果您使用@Request[key]
请求值,则框架会在以下步骤中搜索值(如果未找到任何内容,则会转到下一步):
Request.QueryString[key]
Request.Form[key]
Request.Cookies[key]
Request.ServerVariables[key]
但我认为从您想要的产品中直接获取价值是一个更好的选择。它对我们的应用程序的安全性更好,也更好地维护。
更新:我已撰写有关此on my blog的博文。