这些是3路一样吗? 哪一个通常是较佳的?
[Route("/todo/{id}", "DELETE")]
[Route("/todo/delete","POST")]
[Route("/todo/delete/{id}","GET")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
非常感谢你...
这些是3路一样吗? 哪一个通常是较佳的?
[Route("/todo/{id}", "DELETE")]
[Route("/todo/delete","POST")]
[Route("/todo/delete/{id}","GET")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
非常感谢你...
优选的路线实际上是包括Id
在PATHINFO因为DELETE请求没有HTTP请求正文可以提交此信息,例如:
[Route("/todo/{id}", "DELETE")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
对于务实的考虑,您可能要允许POST做,因为浏览器设置为默认(和一些代理)不允许删除请求发送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动词的瑞士军刀。 对于一些资源,可以用来改变内部状态。 对于其他人,其行为可能是一个远程过程调用的。
看看那个页面的完整描述。