문제

이 3 가지 경로가 동일합니까?어느 것이 정상적으로 선호 되는가?

[Route("/todo/{id}", "DELETE")]
[Route("/todo/delete","POST")]
[Route("/todo/delete/{id}","GET")]
public class DeleteTodo : IReturnVoid
{
    public int Id { get; set; }
}
.

고맙습니다.

도움이 되었습니까?

해결책

기본적인 경로는 실제로 삭제 요청이 필요하지 않으므로 삭제 이 정보를 제출할 수있는 HTTP 요청 본문이 없으므로

[Route("/todo/{id}", "DELETE")]
public class DeleteTodo : IReturnVoid
{
    public int Id { get; set; }
}
.

실용적인 이유로 게시물 포스트 을 허용 할 수 있습니다. 브라우저 내 기본값 (및 일부 프록시)은 삭제 요청을 송신하지 못하도록 허용하지 않습니다.

[Route("/todo/{id}/delete", "POST")]
public class DeleteTodo : IReturnVoid
{
    public int Id { get; set; }
}
.

Ajax 호출에 x-http-method-override http 요청 헤더를 추가하거나 필드로 x-http-method-override http 요청 헤더를 추가하여 삭제 요청을 시뮬레이트 할 수 있습니다.FormData 또는 QueryString, 예 :

POST /todo/1
X-Http-Method-Override=DELETE 
.

또는 다음과 같은 HTML FormData에 포함 된 것 :

<form action="/todo/1" method="POST">
   <input type="hidden" name="X-Http-Method-Override" value="DELETE"/>
</form>
.

계약에 따라 삭제를 허용하지 않는 것이 중요하지만 부작용이 없어야합니다. 이는 프록시와 같은 HTTP 중간 도자기에 의해 캐시되고 재생할 수 있도록 안전합니다.

다른 팁

REST 지침을 따르고 싶다면 GET 또는 POST를 사용하여 자원을 삭제해서는 안됩니다.

가져 오기 동사는 자원을 읽는 데 사용됩니다. 엄지 손가락의 중요한 규칙 그것이 얻는 일이 안전하다는 것입니다. 즉, 반복적으로 수행 할 수 있습니다 자원의 상태를 가시적으로 변경하지 않고 이 속성은 다양한 이유로 매우 중요합니다. 첫째, 인덱싱 엔진은 GET를 사용합니다 자원의 내용을 인덱싱하려면. 그래서 인덱싱하는 경우 나쁘다 자원도 변경되었습니다. 두 번째, 프록시와 같은 중개인, 후속 액세스를 가속화하기위한 얻기 작업의 결과를 캐시 할 수 있습니다. 동일한 자원으로.

PUT 및 DELETE VERBS는 요청을 변경할 수 있습니다. 원자 적으로 자원.

포스트 동사는 다양한 의미를 가지고 있습니다. 그것은 스위스 군대입니다 HTTP 동사의 칼. 일부 리소스의 경우, 변경하는 데 사용할 수 있습니다. 내부 상태. 다른 사람들을 위해 그 행동은 원격의 것일 수 있습니다. 절차 호출.

페이지

를 살펴보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top