asp.net网页中的Request和Request.Form的良好实践2

时间:2014-03-14 14:06:44

标签: c# asp.net forms razor request

我正在阅读有关asp.net网页2的一些教程,我发现了令人困惑的内容

在此页面中:http://www.asp.net/web-pages/tutorials/working-with-pages/validating-user-input-in-aspnet-web-pages-sites以下代码:

<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只会在表单的字段中进行检查。

这可能造成任何类型的错误/安全问题......是对请求的好坏使用......?

2 个答案:

答案 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]请求值,则框架会在以下步骤中搜索值(如果未找到任何内容,则会转到下一步):

  1. Request.QueryString[key]
  2. Request.Form[key]
  3. Request.Cookies[key]
  4. Request.ServerVariables[key]
  5. 但我认为从您想要的产品中直接获取价值是一个更好的选择。它对我们的应用程序的安全性更好,也更好地维护。

    更新:我已撰写有关此on my blog的博文。