博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC 5 - 查询Details和Delete方法
阅读量:6934 次
发布时间:2019-06-27

本文共 2465 字,大约阅读时间需要 8 分钟。

原文:

在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法。

查询Details和Delete方法

打开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 scaffolding引擎增加了一个注释表明,在调用的HTTP请求方法中,GET请求有三个URL段,Movies控制器,Details方法和ID值。

Code First 使得您可以轻松的使用方法来搜索数据。一个重要的安全功能内置到了方法中。方法首先验证Find方法已经找到了一部电影,然后再执行其它代码。例如,黑客可以通过更改http://localhost:xxxx/Movies/Details/1http://localhost:xxxx/Movies/Details/12345 (或某些其它值,不代表实际影片的值)从而使得链接URL 出现错误。如果您没有检测是否找到了Movie, null Movie会导致出现数据错误。

查看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");}

请注意,DeleteHTTP Get 方法不会删除指定的电影,它返回删除电影的视图,您可以在此视图中提交 (HttpPost) 删除电影。如果使用GET 请求执行删除操作(或者执行编辑操作,创建操作或者更改数据的任何其它操作) 开辟了一个安全漏洞。对此的详细信息,请参阅斯蒂芬 · 瓦尔特的博客.

将删除数据的HttpPost方法命名为唯一签名或名称的 DeleteConfirmed 方法。这两个方法的签名如下所示:

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

公共语言运行时 (CLR)重载方法时,需要方法具有独特唯一的签名 (方法名称相同但不同的参数列表)。但是,在这里您需要两种删除方法 — — 一个 GET方法和一个POST方法它们都具有相同的签名。(他们都需要接受一个整数作为参数)。

要解决这一点,可以有几种办法。一是使用不同的方法名称。这是框架代码在前面的示例中所使用的方法。然而,这就带来了一个小问题: ASP.NET 将部分的 URL按名称映射到操作方法,如果您重命名了方法,通常Routing将无法找到该方法。解决方法是您在示例中看到的,将ActionName("Delete")属性添加到DeleteConfirmed 方法。这会有效的执行Routing系统的Url映射,这样一个包含/Delete/的 POST 请求的URL 将找到DeleteConfirmed 方法。

另一个常见的方法,来避免具有相同名称和签名的方法,是人为地改变POST 方法,包括未使用参数的签名。例如,有些开发人员添加参数类型 ,是会传递给 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主机。 如通过微软的,您可以部署多达10个Web站点。我建议你​​下一步请按照我的教程,以更深入了解如何部署。另外,还有一个很好的教程是Tom Dykstra's的中级的. 和 。

提出问题的好地方:StackOverflow的ASP.NET MVC的论坛或者。请关注,这样你就可以获得最新教程的更新信息流。

任何意见,欢迎反馈。

转载地址:http://ijgjl.baihongyu.com/

你可能感兴趣的文章
Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序...
查看>>
ajaxFileUpload文件上传
查看>>
Java凝视Override、Deprecated、SuppressWarnings具体解释
查看>>
C++学习笔记13-类继承
查看>>
修改以及设计好的表
查看>>
UML用例图总结
查看>>
八大排序算法
查看>>
在LINUX终端和VIM下复制粘贴
查看>>
IE开发人员工具手册
查看>>
【转】android是32-bit系统还是64-bit系统
查看>>
C 文件操作库函数总结
查看>>
CSS 清除浮动的几种方式
查看>>
[转]PHP: 深入pack/unpack
查看>>
外包:卡卡软件简要思路
查看>>
H264码流打包分析(精华)
查看>>
VK Cup 2012 Qualification Round 2 C. String Manipulation 1.0 字符串模拟
查看>>
Pyqt5 获取命令行参数sys.argv
查看>>
virtaulbox视图模式常用切换
查看>>
尹中立:“人造牛市”的结局可能会非常悲惨
查看>>
堆C数组实现
查看>>