当我尝试使用DELETE动词时,我得到一个空参数或者控制器没有触发。
首先我尝试了这个:
[HttpDelete]
public IHttpActionResult Delete(Announcement announcement) {
_unitOfWork.Announcements.Remove(announcement);
_unitOfWork.Complete();
return Ok();
}
控制器会触发,但announcement
为null
。如果我在客户端检查参数不为null,则它是一个正确形成的对象。
如果我添加如下所示的Route
属性,则控制器根本不会启动。
[HttpDelete]
[Route("api/announcements/{announcement}")]
public IHttpActionResult Delete(Announcement announcement) {
_unitOfWork.Announcements.Remove(announcement);
_unitOfWork.Complete();
return Ok();
}
客户端通过角度启动DELETE
。
myAPIservice.DeleteAnnouncement = function (announcement) {
console.log('In myAPIservice DeleteAnnouncement');
console.log(announcement);
return $http.delete(serviceURLRoot + 'api/announcements/', announcement, { withCredentials: true }).success(function (data) {
console.log('myAPIservice.DeleteAnnouncement Success');
});
};
编辑---
公告类:
public class Announcement {
public int AnnouncementId { get; set; }
public string AnnouncementText { get; set; }
}
答案 0 :(得分:2)
您无法发送'身体'用DELETE调用。
您可以以参数的形式发送公告ID:
myAPIservice.DeleteAnnouncement = function (announcementId) {
console.log('In myAPIservice DeleteAnnouncement');
console.log(announcement);
return $http.delete(serviceURLRoot + 'api/announcements/', announcementId, { withCredentials: true }).success(function (data) {
console.log('myAPIservice.DeleteAnnouncement Success');
});
};
然后从您的数据库中检索它并将其删除到服务器端:
[HttpDelete]
[Route("api/announcements/{announcementId}")]
public IHttpActionResult Delete(int announcementId) {
var announcement = _unitOfWork.GetAnnouncementById(announcementId);
_unitOfWork.Announcements.Remove(announcement);
_unitOfWork.Complete();
return Ok();
}
当然也可以通过id删除......无论什么都可以。
这里要注意的重要部分是DELETE不能携带有效载荷/主体。