ASP.NET MVC4 新手入门教程之九 ---9.查询详情和删除方法

在本教程的这一部分,您会检查自动生成的DetailsDelete方法。

检查详细信息和删除方法

打开Movie控制器并检查的Details的方法。

ASP.NET MVC4 新手入门教程之九 ---9.查询详情和删除方法_第1张图片

public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie); }

创建此操作方法的 MVC 脚手架引擎添加注释显示一个调用方法的 HTTP 请求。在这种情况下它是三个 URL 部分、Movies 控制器、Details 方法与一个ID 值的GET 请求。

代码首先很容易搜索数据使用 Find方法。重要的安全功能,内置的方法是代码验证Find方法已发现一部电影之前此代码将尝试做任何事了。例如,黑客还可以通过更改由从http://localhost:xxxx/Movies/Details/1到的东西像http://localhost:xxxx/Movies/Details/12345 (或一些其他的值,并不代表实际的电影) 的链接创建的 URL 错误引入到网站中。如果你不做检查 null 的电影,一个空的电影会导致数据库错误。

检查DeleteDeleteConfirmed的方法。

// GET: /Movies/Delete/5 public ActionResult Delete(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie); } // POST: /Movies/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { Movie movie = db.Movies.Find(id); db.Movies.Remove(movie); db.SaveChanges(); return RedirectToAction("Index"); }

请注意HTTP Get Delete方法并不会删除指定的电影,它返回的电影的视图,你可以提交 (HttpPost) 删除。执行删除操作响应 GET 请求 (或对于那件事,需要执行的编辑操作,创建操作或更改数据的任何其他操作) 开辟了一个安全漏洞。有关详细信息,请参阅 Stephen 瓦尔特博客ASP.NET MVC 提示 #46 — — 不要使用删除链接,因为它们创建安全漏洞.

将删除数据的HttpPost 方法被命名为 DeleteConfirmed ,给出了 HTTP POST 方法,一个独特的签名或名称。两个方法签名如下所示:

// GET: /Movies/Delete/5 public ActionResult Delete(int? id) // // POST: /Movies/Delete/5 [HttpPost, ActionName("Delete")] public ActionResult DeleteConfirmed(int id)

公共语言运行库 (CLR) 需要重载的方法,具有独特的参数签名 (方法名称相同但不同的参数列表)。然而,在这里你需要两种都具有相同的参数签名的删除方法 — — 一个得到 — — 和一个职位。(他们都需要接受一个整数作为参数。

若要排序这一点,你可以做几件事情。一个是给出了方法不同的名称。这是基架机制在前面的示例中做了什么。然而,这介绍了一个小问题: ASP.NET 将线段的 URL 映射到操作方法的名字,和如果您重命名的方法,通常路由将无法找到该方法。解决方案是在示例中,将ActionName("Delete")属性添加到DeleteConfirmed 的方法就是你看到什么。这有效地执行映射路由系统,所以发现一个包含/Delete/的 POST 请求 URL 的DeleteConfirmed 方法。

另一个常见的方法,为避免与具有相同名称和签名的方法的问题是人为地改变 POST 方法,包括未使用的参数的签名。例如,一些开发人员添加参数类型 FormCollection 就是传递给 POST 方法,然后根本不使用此参数:

public ActionResult Delete(FormCollection fcNotUsed, int id = 0) { Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } db.Movies.Remove(movie); db.SaveChanges(); return RedirectToAction("Index"); }

摘要

你现在有一个完整的 ASP.NET MVC 应用程序在本地的 DB 数据库中存储数据。你可以创建、 读取、 更新、 删除和搜索电影。

ASP.NET MVC4 新手入门教程之九 ---9.查询详情和删除方法_第2张图片

接下来的步骤

已经建立和测试 web 应用程序之后下, 一步是将它提供给其他人使用互联网。要做到这一点,必须将其部署到一个虚拟主机提供商。Microsoft 提供了免费的虚拟主机达 10 web 站点中的Windows Azure 试用帐号我建议你下一步跟着我的教程Deploy、 OAuth,与 SQL 数据库对 Windows Azure Web 站点安全的 ASP.NET MVC 应用程序部署优秀的教程是汤姆戴克斯特中间级创建 ASP.NET MVC 应用程序中的实体框架数据模型计算器ASP.NET MVC 论坛是一个伟大的地方,要问的问题。

 

原文地址:http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/examining-the-details-and-delete-methods

到此就结束了,你会用MVC4了么?

欢迎留言讨论

你可能感兴趣的:(asp.net)