【发布时间】:2011-06-04 08:53:36
【问题描述】:
我收到一条错误消息:“不允许使用 HTTP 动词 POST 访问路径 '[my path]'。”。
这个错误是由于我正在实现一个使用 POST 方法的 HTML 表单元素,并且没有在其 ACTION 参数中明确定义一个 .aspx 页面。
例如:
<form action="" method="post">
<input type="submit" />
</form>
上面的 HTML 位于“/foo/default.aspx”的文件中。
现在,如果用户将 URL 指向根目录“foo”而不指定 aspx 文件(即“http://localhost/foo”)然后提交表单,则会出现错误“HTTP verb POST used to不允许访问路径 '/foo'。”会被抛出。
但是,如果用户转到“http://localhost/foo/default.aspx”然后提交表单,一切顺利(即使ACTION参数为空)。
注意:如果我将 .aspx (default.aspx) 页面的名称显式添加到 ACTION 参数,则不会引发错误。因此,无论用户是否在 URL 中定义文件名,下面的示例都可以正常工作。
<form action="default.aspx" method="post">
<input type="submit" />
</form>
我很好奇为什么会抛出错误,所以我阅读了Microsoft KB 声明
出现此问题是因为客户端 通过发送 HTTP 请求 POST 方法到静态 HTML 页面。 静态 HTML 页面不支持 POST 方法。
我认为解释的核心是有道理的,但是在我的情况下,我的表单没有被发送到静态 html 页面 - 它被发送到 html 表单所在的同一页面(default.aspx).. . 这对于留空的 ACTION 参数是隐含的。
是否可以配置 IIS(或其他方式)以允许我们进行表单 POST 并保持 ACTION 参数为空?
【问题讨论】:
-
我会尽量避免不指定操作。由于浏览器进行发布,而不是指定操作(很少见),我猜您可能会在某些平台/浏览器上遇到奇怪的行为。
-
是的,您应该始终指定一个操作,即使它是回发到同一页面本身。