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

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

检查详细信息和删除方法

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

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 数据库中存储数据。你可以创建、 读取、 更新、 删除和搜索电影。

接下来的步骤

已经建立和测试 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了么?

欢迎留言讨论

posted @ 2015-01-23 15:26  178mz  阅读(292)  评论(0编辑  收藏  举报