【问题标题】:Create Postman Delete request with composite key使用复合键创建邮递员删除请求
【发布时间】:2022-01-12 23:18:41
【问题描述】:

我在 Postman 工作,完全是初学者,目前正在学习数据库工作。 我创建了一个带有小型本地数据库的 Web API,并使用 C# 和实体框架用我想要的数据填充它。所有 Postman 请求都按设计工作,除了 PUT 和 DELETE 请求,我在其中收到错误消息(放置时 405 和删除时 500)。我怀疑这些与同一个问题有关,即我正在使用复合键。

另一方面,500 表示我正在使用复合键并且我只输入一个值。由于两个表之间存在多对多关系,我选择了组合键,但是如何将其输入到删除请求中?有没有办法为此设置请求 URL(因为如果我在删除请求的正文中放入任何内容,我会不断收到错误 405 Method Not Allowed)?

我确定我在这里遗漏了一些非常明显的东西,因为感觉它不应该那么复杂,但我找不到被问到的类似问题。

编辑:

代码非常基础,不确定对问题有什么影响,看起来像这样;

    {
        public int StudentId { get; set; }
        public int CourseId { get; set; }
        public Student Student { get; set; }
        public Course Course { get; set; }
    }

StudentId 和 CourseId 构成一个复合主键,我正在尝试删除 StudentCourse 类的一个对象。建议/需要的请求网址是:/api/StudentCourses/{id},我不知道如何输入,因为它是一个复合键。

HttpDelete 操作看起来像这样,请注意,这是自动生成的操作,我完全可以看到它不起作用,因为 StudentCourses 没有任何单个 id 可供查找,因此 FindAsync 无论如何都不会通过,因为它什么也找不到。

话虽如此,我不知道如何解决这个问题,因为该操作本身只要求一个整数,这意味着 Postman 意识到我需要主键的更多部分才能到达这里。

        public async Task<IActionResult> DeleteStudentCourse(int id)
        {
            var studentCourse = await _context.StudentCourses.FindAsync(id);
            if (studentCourse == null)
            {
                return NotFound();
            }

            _context.StudentCourses.Remove(studentCourse);
            await _context.SaveChangesAsync();

            return NoContent();
        }

        private bool StudentCourseExists(int id)
        {
            return _context.StudentCourses.Any(e => e.StudentId == id);
        }

【问题讨论】:

  • 如果没有看到您的原始代码,我们将不知道如何对您现有的代码库进行更改。请发minimal reproducible example,并详细说明需要修改的地方。
  • 能否发布您的 HttpPut 和 HttpDelete 操作,以及接受数据和 ajax 请求的模型?
  • 当然,我已经编辑了原帖:)

标签: c# .net-core entity-framework-core postman asp.net-core-webapi


【解决方案1】:

假设 ID 是学生 ID,并且您正在尝试删除该学生的所有 StudentCourse 记录

[Route[("~/api/StudentCourses/DeleteStudentCourse/{id}")]
public async Task<IActionResult> DeleteStudentCourse(int id)
 {
var studentCourses = await _context.StudentCourses.Where(e => e.StudentId == id).ToListAsync();

 if (studentCourses == null || studentCourses.Count==0)
 {
     return NotFound();
 }

 _context.StudentCourses.RemoveRange(studentCourses);
 var result= await _context.SaveChangesAsync();

 if (result> 0) return Ok();

  return BadRequest();
}

建议的网址

.../api/StudentCourses/DeleteStudentCourse/{id}

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2022-08-15
    • 2018-03-20
    • 2017-06-08
    • 2019-10-12
    • 2021-12-04
    • 1970-01-01
    • 2017-06-17
    • 2021-03-28
    相关资源
    最近更新 更多