这三条路线是一样的吗?通常首选哪一个?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