2016-12-01 4 views
0

DELETE 동사를 사용하려고하면 null 매개 변수가 표시되거나 컨트롤러가 실행되지 않습니다.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

Entity Framework 덕분에 데이터베이스를 제거하기 전에 데이터베이스에서 개체를 가져와야하므로 불행합니다. 여분의 왕복을 피하기 위해 DELETE 호출을 POST로 대체하는 것이 일반적입니까? – Legion

+1

아니요 삭제할 게시물을 만들지 마세요! 이것 좀 봐 - http://stackoverflow.com/questions/2471433/how-to-delete-an-object-by-id-with-entity-framework – Alex

관련 문제