zoukankan      html  css  js  c++  java
  • MVC LocalDB数据库。在控制器里检查编辑信息和删除的方法

    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);如果你不做检查 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");
    }

    摘要

  • 相关阅读:
    Apple http live streaming 不支持windows?
    CDN设计:[笔记]Analysis of Enterprise Media Server Workloads
    牛项目 Harvest
    一些校园招聘的题目和分析
    关于pdf转doc (word) 的工具 Solid Converter PDF
    A CAP Solution (Proving Brewer Wrong)
    6"电纸书/电子书 PaperCrop pdf重排使用心得
    CDN设计 层级化的cache_A
    Berkeley DB Hash、Btree、Queue、Recno 选择
    PowerDesigner 学习系列 简单操作
  • 原文地址:https://www.cnblogs.com/275147378abc/p/4762937.html
Copyright © 2011-2022 走看看