【发布时间】: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