我应该在帖子或网址中存储_method = PUT / DELETE

时间:2009-03-20 03:28:47

标签: c# asp.net-mvc http rest

我正在使用ASP.NET MVC构建RESTful Web应用程序,我计划通过POST隧道传递PUT和DELETE请求,因为它似乎是最实用的解决方法。

我想知道的是,我应该通过这样的网址传递信息:

<form method='post' action='resource?_method=DELETE'>
    <!-- fields -->
</form>

或者我应该通过发布的表单数据进行隧道传输:

<form method='post' action='resource'>
    <input type='hidden' name='_method' value='DELETE' />
    <!-- fields -->
</form>

各自的优点和缺点是什么?

编辑:我提出这个问题的原因之一就是我在某个地方读到这样的信息将这样的信息放入网址是一件好事,因为帖子数据通常会丢失,但网址会挂起(在日志文件等) - 不幸的是它使网址看起来很丑陋

4 个答案:

答案 0 :(得分:4)

您是否看到了this个问题?据我所知,x-http-method-override标头是解决此问题的首选方法。

答案 1 :(得分:2)

这更多是个人偏好。 Restful Web Services,OReilly,可以互换地描述。

话虽如此,出于程序员意图的原因,我更喜欢第一种方法。在休息时,当我查看代码时,我精神上阅读了

VERB http://someuri.com/someresource/id

动词和资源紧密相连。

使用PUT和DELETE,您必须使用类似于您所显示的解决方法。在第一个示例中,资源和动词在同一行上仍然靠近在一起。

但是,在第二个示例中,资源分为两行。动词与资源ID位于同一行,但远离资源名称。这非常非常轻微,但对我来说,这使第二个例子的可读性降低。

答案 2 :(得分:0)

不是我有,但你不应该使用:

<form method="put" action="resource">
    <!-- fields -->
</form>

和/或

<form method="delete" action="resource">
    <!-- fields -->
</form>

...

答案 3 :(得分:-1)

它们是等价的。

虽然如果按下我宁愿自己发帖,但这是主观的。