检查 ASP.NET Core 应用的 Details 和 Delete 方法Examine the Details and Delete methods of an ASP.NET Core app

    打开电影控制器,并检查 方法:

    创建此操作方法的 MVC 基架引擎添加显示调用方法的 HTTP 请求的注释。在此情况下,它是包含三个 URL 段的 GET 请求,这三个段为 Movies 控制器、Details 方法和 id 值。回顾这些在 Startup.cs 中定义的段。

    1. app.UseEndpoints(endpoints =>
    2. {
    3. name: "default",
    4. pattern: "{controller=Home}/{action=Index}/{id?}");
    5. });

    EF 可以使用 方法轻松搜索数据。该方法中内置的一个重要安全功能是,代码会先验证搜索方法已经找到电影,然后再执行操作。例如,一个黑客可能通过将链接创建的 URL 从 http://localhost:{PORT}/Movies/Details/1 更改为类似 的值(或者不代表任何实际电影的其他值)将错误引入站点。如果未检查是否有空电影,则应用可能引发异常。

    请注意,HTTP GET Delete 方法不删除指定的电影,而是返回可在其中提交 (HttpPost) 删除的电影视图。执行删除操作以响应 GET 请求(或者说,执行编辑操作、创建操作或更改数据的任何其他操作)会打开安全漏洞。

    删除数据的 [HttpPost] 方法命名为 DeleteConfirmed,以便为 HTTP POST 方法提供一个唯一的签名或名称。下面显示了两个方法签名:

    1. // GET: Movies/Delete/5

    公共语言运行时 (CLR) 需要重载方法拥有唯一的参数签名(相同的方法名称但不同的参数列表)。但是,这里需要两个 Delete 方法 — 一个用于 GET,另一个用于 POST — 这两个方法拥有相同的参数签名。(它们都需要接受单个整数作为参数。)

    对于名称和签名相同的方法,另一个常用解决方法是手动更改 POST 方法的签名以包括额外(未使用)的参数。这正是前面的文章中添加 notUsed 参数时进行的操作。这里为了 [HttpPost] Delete 方法可以执行同样的操作:

    1. // POST: Movies/Delete/6
    2. [HttpPost]
    3. [ValidateAntiForgeryToken]

    发布到 AzurePublish to Azure

    若要了解如何部署到 Azure,请参阅。

    上一篇