0

是否更好地使用:

<form class="delete" action="/post/delete/id/1234.html" method="POST">
    <input type="submit" value="delete this post"/>
</form>

...代替:

<a class="delete" href="/post/delete/id/1234.html">delete this post</a>

...何时需要修改数据库中的某些内容?比如添加、更新、删除和投票时?还用于注销操作(在我的应用程序中,在执行操作时保存时间戳)等等?

4

5 回答 5

2
<form class="delete" action="/post/delete/id/1234.html" method="POST">
    <input type="submit value="delete this post"/>
</form>

关于代码会生成HTTP Post

<a class="delete" href="/post/delete/id/1234.html">delete this post</a>

上面的代码将生成HTTP Get. 您不应该使用Get更新/删除记录。换句话说,您不应该使用上面的超链接来删除记录。

HTTP 动词

这是ASP.NET MVC 4 和 Web API书对 HTTP Verb 的解释

GET - 获取由 URI 标识的特定任务

PUT - 替换或创建由 URI 标识的单个任务

POST - 在 URI 标识的任务下创建一个新的下属

DELETE - 删除由 URI 标识的任务

于 2013-08-14T18:42:55.180 回答
2

好吧,根据HTTP 规范,POST(在这种情况下是您的表单提交)用于更改数据,而 GET(在这种情况下是您的链接)用于检索数据。所以你应该使用 POST 来删除东西,而链接应该只用于检索东西。如果不出意外,这会使您的最终用户更难编辑 URL 以删除他们不应该删除的内容。但实际上,将 POST 用于任何会改变您的数据的事情都是“正确的”。

编辑:包括上面链接中的一些文本:

GET
请求指定资源的表示。使用 GET 的请求应该只检索数据并且应该没有其他效果。

于 2013-08-14T18:44:25.047 回答
1

使用GET,您可能会发生意外或恶意行为。考虑一下:

<img src="http://yourdomain.com/post/delete/id/1234.html">

如果用户(在任何网站上)查看此“图像”并且他们具有删除权限,它将向该页面发送请求并删除帖子。是的,您可以检查引用者和类似的东西,但这是一个最好避免的问题。出于这个原因,我也更喜欢POST注销。

您应该使用的唯一时间GET是请求查看内容,而不是删除、编辑或添加数据。

于 2013-08-14T18:42:15.460 回答
1

对于这种情况,它并不重要。

当您有表单项(文本框、复选框)或者如果您想通过 POST 而不是 GET 发送信息时,它就很重要。

于 2013-08-14T18:40:45.323 回答
1

表单提交是当您想要将用户定义的值提交到服务器时。在你的例子中

<form class="delete" action="/post/delete/id/1234.html" method="POST">
    <input type="submit value="delete this post"/>
</form>

在表单提交中,您可以输入必须提交给服务器进行操作的值。何时使用表单提交的示例是登录页面。注册页面,即将用户定义的值提交到服务器时

但在这个例子中

<a class="delete" href="/post/delete/id/1234.html">delete this post</a>

您没有输入界面供用户输入值并提交到服务器。当您要传递非用户定义的静态值或主要重定向到另一个页面时,使用这些值。

于 2013-08-14T18:48:33.970 回答