这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,因为我的默认浏览器(和一些代理)不允许发送 DELETE 请求。
[Route("/todo/{id}/delete", "POST")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
您可以通过在 Ajax 调用中添加X-Http-Method-Override HTTP 请求标头或作为 FormData 或 QueryString 中的字段来模拟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 删除,因为根据合同 GET 应该没有副作用,因此可以安全地被 HTTP 中间件(如代理等)缓存和重放。
如果您想遵循 REST 准则,则不应使用 GET 或 POST 来删除资源。
GET 动词用于读取资源。一个重要的经验法则是 GET 操作是安全的。也就是说,它可以重复执行而不会明显改变资源的状态。由于各种原因,该属性非常重要。首先,索引引擎使用 GET 来索引资源的内容。因此,如果索引资源也改变了它,那就不好了。其次,诸如代理之类的中介可以缓存 GET 操作的结果,以加速对同一资源的后续访问。
PUT 和 DELETE 动词允许请求以原子方式更改资源的状态。
POST 动词可以有多种含义。它是 HTTP 动词的瑞士军刀。对于某些资源,它可以用来改变内部状态。对于其他人,它的行为可能是远程过程调用的行为。
查看该页面以获取完整说明。