【发布时间】:2017-05-27 14:37:06
【问题描述】:
我有一个简单的 CRUD 操作控制器。所有操作都需要最后一个名为 Delete 的操作,即 HTTP DELETE 操作。当我尝试使用示例 url 调用删除操作时:
然后应用程序返回 404 Not Found 并且操作未触发。
在我的其他控制器中,删除操作正常工作。一个区别是,在其他控制器中,我在控制器上而不是在每个操作上都有一个路由属性。这是个问题?
public class AttendancesController : Controller
{
public AttendancesController(IGroupService groupService, IAttendanceService attendanceService, IPersonService personService, IPersonAttendanceService personAttendanceService)
{
//
}
[Route("api/groups/{groupId}/[controller]")]
[HttpGet]
public IActionResult GetAttendancesForGroup(int groupId)
{
//
}
[Route("api/groups/{groupId}/[controller]/{date}")]
[HttpGet]
public IActionResult GetAttendanceForGroup(int groupId, DateTime date)
{
//
}
[Route("api/groups/{groupId}/[controller]")]
[HttpPost]
public IActionResult CreateAttendanceForGroup(int groupId, [FromBody] AttendanceCreateDto dto)
{
//
}
[Route("api/people/{personId}/[controller]")]
[HttpGet]
public IActionResult GetAttendancesForPerson(int personId)
{
//
}
[Route("api/groups/{groupId}/[controller]")]
[HttpDelete("{id}")]
public IActionResult Delete(int groupId, int id)
{
var group = _groupService.FindById(groupId);
if (group == null)
return NotFound();
var attendance = _attendanceService.GetAttendanceByIdAndGroupId(id,groupId);
if (attendance == null)
return NotFound();
_attendanceService.Delete(attendance);
return NoContent();
}
}
【问题讨论】:
-
只是好奇,您是否尝试将删除路由更改为:
Route("api/groups/{groupId}/[controller]/{id}")? -
@SivaGopal oo 这行得通,但我不明白为什么在这种情况下 [HttpDelete("{id}")] 被忽略
标签: c# asp.net-core asp.net-web-api-routing asp.net-core-webapi