不允许使用用于访问路径'[my path]'的HTTP谓词POST

时间:2011-01-05 23:47:38

标签: asp.net forms post

我收到一条错误消息,指出:“不允许使用用于访问路径'[my path]'的HTTP动词POST。”。

错误是由于我正在实现一个使用POST方法的HTML表单元素并且没有在其ACTION参数中显式定义.aspx页面这一事实。

例如:

<form action="" method="post">
  <input type="submit" />
</form>

上面的HTML位于“/foo/default.aspx”的文件中。

现在,如果用户将URL指向根目录“foo”而未指定aspx文件(即“http:// localhost / foo”)然后提交表单,则会出现错误“HTTP动词POST用于不允许访问路径'/ 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参数为空?

7 个答案:

答案 0 :(得分:3)

检查您的默认文档 - 未指定操作,它可能会剥离回foo/。如果您有一个静态的默认文档(即:Default.html,而不是Default.aspx),则可能会导致此问题。

答案 1 :(得分:1)

尝试使用“./”作为您的行动。

答案 2 :(得分:0)

自从最初遇到此错误以来已经过了一年,并且我认为我应该在此帖中添加我不再收到错误。

我不知道是什么解决了这个问题,但我的猜测是,由于我的开发机器在一年内实施了一些Windows Update,错误已经消失。

我在IIS 7设置中注意到的一件事是&#34; ISAPI.DLL&#34; (在&#34; Handler Mappings&#34;部分中)被禁用。我无法弄清楚如何启用&#34;它是为了尝试重现问题,以显示ISAPI.DLL导致(或相关)问题。

无论如何,当我离开&#34;动作时,我无法重现这个错误。 HTML表单标记中的属性为空。所以,我的猜测是有一个IIS和/或.NET Framework更新,它隐式或明确地修复了OP中提到的错误。

答案 3 :(得分:0)

我发生了同样的事情 - 通过在表单标签中使用action =“”。不知道它是怎么进入那里的。有时,当我编辑gridView时,它不会与HTML“同步”。也许这就是发生的事情。奇怪的。我也花了一段时间才找到它!

答案 4 :(得分:0)

ASP.Net ISAPI DLL已插入以翻译所有(*)网址,因此必须按照以下步骤操作:

  1. 点击网站
  2. 选择“属性”,然后在“虚拟目录”选项卡上单击“配置”
  3. 删除ASP.Net ISAPI DLL(C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll)
  4. 重新启动IIS并重试。

答案 5 :(得分:0)

我在设置自定义HTTP处理程序时遇到此错误,而不是使用表单。 您必须让IIS(或VisualStudio中的WebDevServer)知道您使用自己的处理程序处理某些页面。这是通过向web.config文件添加条目来完成的。我可以输出它们,但生命很短暂,太阳落在院子臂上,所以这里是一个链接 - 但向下滚动到&#34;在IIS中注册自定义HTTP处理程序&#34;。或者阅读整篇文章,因为它都是好的,多肉的技术... ...

http://msdn.microsoft.com/en-us/library/ms227433%28v=vs.100%29.aspx

希望有所帮助。

答案 6 :(得分:0)

使用下面的重定向行添加index.htm

<html>
  <head>
    <meta http-equiv="Refresh" content="0; url=Default.aspx" />
  </head>

</html>