删除不使用Web Api

时间:2016-12-01 16:07:27

标签: angularjs asp.net-web-api

当我尝试使用DELETE动词时,我得到一个空参数或者控制器没有触发。

首先我尝试了这个:

    [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; }
}

1 个答案:

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