2016-12-01 48 views
0

当我尝试使用DELETE动词时,我得到一个空参数或控制器不会触发。删除不能使用Web Api

首先我尝试这样做:

[HttpDelete] 
    public IHttpActionResult Delete(Announcement announcement) { 
     _unitOfWork.Announcements.Remove(announcement); 
     _unitOfWork.Complete(); 
     return Ok(); 
    } 

控制器火灾,但announcementnull。如果我检查客户端的参数不是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

'Announcement'类是什么样的? – PzYon

+0

@PzYon更新了公告类定义的问题。 – Legion

+0

公告的形状是无关紧要的我很害怕 - 看到我的回答 – Alex

回答

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不能携带有效载荷/主体。

+0

这是不幸的,因为这意味着我必须从数据库中取出对象,然后才能删除它(因为实体框架)。将DELETE调用替换为POST可以避免多余的往返行为吗? – Legion

+1

不要做一个帖子删除!检查出来 - http://stackoverflow.com/questions/2471433/how-to-delete-an-object-by-id-with-entity-framework – Alex