ASP.NET MVC 5 - 查询Details和Delete方法

来源:互联网 发布:ico图标制作软件 编辑:程序博客网 时间:2024/04/28 15:59

在本教程的这一部分,您会检查自动生成的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/电影/细节/1到的东西像http://localhost:xxxx/电影/细节/12345 (或一些其他的值,并不代表实际的电影) 的链接的 URL 错误引入到站点中。如果你不做检查 null 的电影,一个空的电影会导致数据库错误。

检查DeleteDeleteConfirmed方法。

// GET: /Movies/Delete/5public 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 请求 (或对于这一问题,需要执行的编辑操作,创建操作或更改数据的任何其他操作) 开辟了一个安全漏洞。有关详细信息,请参阅斯蒂芬 · 瓦尔特博客ASP.NET MVC 提示 #46 — — 不使用删除链接,因为它们创建安全漏洞.

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

// GET: /Movies/Delete/5public 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 应用程序之后下, 一步是将它提供给其他人使用互联网。要做到这一点,必须将其部署到 web 宿主提供程序。Microsoft 提供了免费的虚拟主机中蔚蓝试用帐号的达 10 web 站点。我建议你下一步按照我的教程会员、 OAuth,与 SQL Azure 数据库安全的 ASP.NET MVC 应用程序部署。优秀的教程是汤姆戴克斯特中间级创建 ASP.NET MVC 应用程序中的实体框架数据模型。计算器和ASP.NET MVC 论坛是一个伟大的地方问问题。跟着我在 twitter 上,所以你可以在我最新的教程上的更新。

反馈是欢迎的。

— —里克 · 安德森twitter: @RickAndMSFT
— —斯科特静态twitter: @shanselman

-----------------------------------------------------------------------------------------

《ASP.NET MVC 5 入门指南》12篇文章汇总如下:

1. ASP.NET MVC 5 - 入门

2. ASP.NET MVC 5 - 控制器

3. ASP.NET MVC 5 - 视图

4. ASP.NET MVC 5 - 添加一个模型

5. ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

6. ASP.NET MVC 5 - 从控制器访问数据模型

7. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

8. ASP.NET MVC 5 - 将数据从控制器传递给视图

9. ASP.NET MVC 5 - 添加搜索

10. ASP.NET MVC 5 - 给电影表和模型添加新字段

11. ASP.NET MVC 5 - 给数据模型添加校验器

12. ASP.NET MVC 5 - 查询Details和Delete方法

希望这些文章对感兴趣的朋友有所帮助

0 0
原创粉丝点击