【问题标题】:The HTTP verb POST used to access path '[my path]' is not allowed不允许使用用于访问路径“[我的路径]”的 HTTP 动词 POST
【发布时间】: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 参数为空?

【问题讨论】:

  • 我会尽量避免不指定操作。由于浏览器进行发布,而不是指定操作(很少见),我猜您可能会在某些平台/浏览器上遇到奇怪的行为。
  • 是的,您应该始终指定一个操作,即使它是回发到同一页面本身。

标签: asp.net forms post


【解决方案1】:

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

【讨论】:

  • 我打算提出同样的建议。听起来这篇文章将指向一个 HTML 页面,该页面将指向 /foo 文件夹中有一个 default.htm。
  • 好建议。但是,/foo 目录只包含一个文件 - default.aspx。更不用说,我已将 IIS 配置为在任何其他文件名之前检查 default.aspx。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    自从最初遇到此错误以来已经一年了,我认为我应该在这篇文章中补充说我不再收到该错误。

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

    我在 IIS 7 设置中注意到的一件事是“ISAPI.DLL”(在“处理程序映射”部分中)被禁用。我不知道如何“启用”它以尝试重现问题以表明 ISAPI.DLL 导致(或相关)问题。

    无论如何,当我在 HTML 表单标记中将“操作”属性留空时,我无法重现此错误。所以,我的猜测是,有一个 IIS 和/或 .NET Framework 更新隐式或显式地修复了 OP 中提到的错误。

    【讨论】:

    • 我看到这在我的机器上也被禁用了。但我仍然得到错误。您还记得哪个更新为您解决了这个问题吗?
    【解决方案4】:

    我也发生了同样的事情——通过在表单标签中添加 action = " "。不知道怎么进去的。有时,当我编辑 gridView 时,它不会与 HTML“同步”。也许这就是发生的事情。诡异的。我也花了一段时间才找到!

    【讨论】:

      【解决方案5】:

      已插入 ASP.Net ISAPI DLL 以翻译所有 (*) URL,因此必须遵循以下步骤:

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

      【讨论】:

        【解决方案6】:

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

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

        希望对您有所帮助。

        【讨论】:

          【解决方案7】:

          添加一个带有以下重定向行的 index.htm

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多