這三條路線是一樣的嗎?通常首選哪一個?ServiceStack路線設計
[Route("/todo/{id}", "DELETE")]
[Route("/todo/delete","POST")]
[Route("/todo/delete/{id}","GET")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
非常感謝您......
這三條路線是一樣的嗎?通常首選哪一個?ServiceStack路線設計
[Route("/todo/{id}", "DELETE")]
[Route("/todo/delete","POST")]
[Route("/todo/delete/{id}","GET")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
非常感謝您......
的首選路線實際上是包括自在PATHINFO的Id
DELETE請求沒有HTTP請求正文可以在提交此信息,例如:
[Route("/todo/{id}", "DELETE")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
對於務實的原因,您可能想要允許POST執行DELETE,因爲我的默認瀏覽器(和某些代理)不允許發送DELETE請求。
[Route("/todo/{id}/delete", "POST")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
可以模擬通過在FORMDATA或查詢字符串,例如添加X-HTTP-方法-覆蓋 HTTP請求報頭中的Ajax調用或作爲字段Ajax中或jQuery的DELETE請求
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>
雖然它不是允許通過GET DELETE的自合同約定GET的應該沒有副作用,因此是安全的緩存和重播是非常重要的HTTP中間件如代理等
如果你想遵循REST準則,你不應該使用GET或POST刪除資源。
GET謂詞用於讀取資源。一個重要的經驗規則 是一個GET操作是安全的。也就是說,它可以重複執行 而不會明顯改變資源的狀態。此屬性是 由於各種原因非常重要。首先,索引引擎使用GET 來索引資源的內容。所以如果索引 資源也會改變它,那將會很糟糕。其次,代理 等中介可緩存GET操作的結果,以加速對相同資源的後續訪問 。
PUT和DELETE動詞允許請求以原子方式更改 資源的狀態。
POST動詞可以帶有多種含義。這是瑞士軍隊的HTTP動詞刀。對於某些資源,它可能用於更改內部狀態。對於其他人,其行爲可能是過程調用的遠程操作。
查看完整說明,請看page。
謝謝,該頁面是一個非常好的指導方針:) – Tom