ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.NET Core应用 检查Details和Delete方法

2022-07-11 15:33:32  阅读:164  来源: 互联网

标签:Core GET id Details HttpPost POST 方法 NET 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有