我收到一条错误消息,指出:“不允许使用用于访问路径'[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参数为空?
答案 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已插入以翻译所有(*)网址,因此必须按照以下步骤操作:
答案 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>