.NET Core应用 检查Details和Delete方法
作者:互联网
1. 检查 Details方法:
路径 :MvcMovie\Controllers\MoviesController.cs
创作此操作方法的MVC基架引擎添加显示调用方法的HTTP请求的注释。
在此情况下,他是包含三个URL段的GET请求,这三个段为 Movies控制器、Details方法和id值。
可以回顾下载program.cs中定义的段:
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
EF可以使用FirstOrDefaultAsync方法轻松搜索数据。该方法中内置的一个重要安全功能是:
代码会先验证搜索方法已找到电影,然后在操作。
2. 检查Delete和DeleteConfirmed方法:
路径 :MvcMovie\Controllers\MoviesController.cs
注意 : HTTP GET Delete方法不删除指定的电影,而是返回可在其中提交(HttpPost)删除的电影视图。
执行删除操作以响应GET请求(或者说,执行编辑操作、创建操作或更改数据的任何其他操作)
会打开安全漏洞。
删除数据的[HttpPost]方法命名为DeleteConfirmed,以便为 HTTP POST方法提供一个唯一的签名或名称。
例:①. // GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
②. // POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
公共语言运行时(CLR)需要重载方法拥有唯一的参数签名(相同的方法名称但不同的参数列表)。但,这里需要两个Delete方法
(一个用于GET,另一个用于POST 这两个方法拥有相同的参数签名[都需要接收单个整数作为参数])
两种方法解决上述问题:
①. 为方法提供不同的名称
会导致的问题:ASP.NET按名称将URL段映射到操作方法,如果重命名方法,则路由通常无法找到该方法。
解决该问题的方法:特性中添加属性ActionName("Delete") 例 :[HttpPost, ActionName("Delete")]
该属性对路由系统执行映射,以便包括POST请求的/Delete/的URL可以找到DeleteConfirm方法。
②. 手动更改POST方法的签名以包括额外(未使用)的参数。例 (新增了notUsed无用参数):
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
标签:Core,GET,id,Details,HttpPost,POST,方法,NET,Delete 来源: https://www.cnblogs.com/AlbertNicole/p/16466570.html