使用组合键创建 Postman Delete 请求
Create Postman Delete request with composite key
我在 Postman 工作,我是一个完全的初学者,目前正在学习数据库工作。
我使用 C# 和 Entity Framework 创建了一个带有小型本地数据库的 Web API 并用我想要的数据填充它。所有 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 构成一个复合主键,我正在尝试删除 class StudentCourse 的一个对象。 suggested/needed 请求 url 是:/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);
}
假设 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();
}
建议url
.../api/StudentCourses/DeleteStudentCourse/{id}
我在 Postman 工作,我是一个完全的初学者,目前正在学习数据库工作。 我使用 C# 和 Entity Framework 创建了一个带有小型本地数据库的 Web API 并用我想要的数据填充它。所有 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 构成一个复合主键,我正在尝试删除 class StudentCourse 的一个对象。 suggested/needed 请求 url 是:/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);
}
假设 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();
}
建议url
.../api/StudentCourses/DeleteStudentCourse/{id}