C# MVC 自学笔记—9 检查详细信息和删除方法

=============================翻译==============================

检查详细信息和删除方法

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

public ActionResult Details(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

第一次代码便于搜索使用Find方法的数据。重要的安全功能,内置了该方法是代码验证代码试图进行任何操作之前就Find方法发现一部电影。例如,黑客还可以通过更改创建的从http://localhost:xxxx/电影/详细信息/1到的东西像http://localhost:xxxx/电影/详细信息/12345 (或某些其他值,并不代表实际的电影) 的链接的 URL 错误引入到站点中。如果你不做检查 null 的电影,空的电影会导致数据库错误。

检查的DeleteDeleteConfirmed方法。

 // GET: /Movies/Delete/5

public ActionResult Delete(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

//
// POST: /Movies/Delete/5

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

请注意DeleteHTTP Get 方法不会删除指定的电影,它返回的视图电影可以提交 (HttpPost) 的位置删除...执行删除操作以获取响应请求 (或对于此事,进行编辑操作,创建操作或更改数据的任何其他操作) 开辟了一个安全漏洞。对此的详细信息,请参阅斯蒂芬 · 瓦尔特博客ASP.NET MVC 提示 #46 — — 不使用删除链接,因为它们创建安全孔.

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

// GET: /Movies/Delete/5
public ActionResult Delete(int id = 0)

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

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

若要排序这一点,可以做几件事情。一个是给不同的名称的方法。这是基架机制在他前面的示例中做了什么。然而,这就带来了一个小问题: 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 中的网站一个免费的 Windows Azure 试用帐户有关如何部署到 Windows Azure Web 站点的 Visual Studio web 项目的信息,请参阅创建和部署 ASP.NET web 站点和 SQL 数据库与 Visual Studio该教程还演示如何使用实体框架代码第一次迁移,将您的 SQL Server 数据库部署到 Windows Azure SQL 数据库 (以前 SQL Azure)。有关部署的更多信息,请参见ASP.NET Web 部署内容地图.

现在,我鼓励你将上移动到我们中间级创建 ASP.NET MVC 应用程序中的实体框架数据模型MVC 音乐商店教程,探讨在 MSDN 上的 ASP.NET 文章,并要签出的很多视频和http://asp.net/mvc要了解更多关于 ASP.NET MVC 的资源 !ASP.NET MVC 论坛是问问题的好地方。

 

=============================翻译==============================

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值