如何解决 HTTP“404”和“405”错误消息?

Posted

技术标签:

【中文标题】如何解决 HTTP“404”和“405”错误消息?【英文标题】:How can I solve HTTP "404" and "405" error msgs? 【发布时间】:2014-11-10 19:03:42 【问题描述】:

HHTP“404”和“405”错误是在“400”错误之后朝着正确方向迈出的一步吗?

更改我的 applicationhost.config 文件后,根据this article 中的第 3 步,从此:

<site name="HHS.Web" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\project\git\CStore\HHS.Web" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:21608:localhost" />
        <binding protocol="http" bindingInformation="*:21608:shannon2" />
    </bindings>
</site>
<site name="HHS.API" id="4">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\project\git\CStore\HHS.API" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:21609:localhost" />
        <binding protocol="http" bindingInformation="*:21609:shannon2" />
    </bindings>
</site>

...到这个:

<site name="HHS.Web" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\project\git\CStore\HHS.Web" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:21608:" />
    </bindings>
</site>
<site name="HHS.API" id="4">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\project\git\CStore\HHS.API" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:21609:" />
    </bindings>
</site>

...并在此 rigamarole 之后重新启动 IIS Express(上面引用的同一篇文章中的第 4 步):

....运行 may 应用程序时,我得到一个不同但更常见的问题,而不是我之前的错误(“400 - 错误请求”):“404 - 未找到”

但是,如果我在手持设备上的 IE 中输入 URL 并运行它,我会得到“405 - 资源不允许”

有谁知道如何解决这个难题/任何人都可以看到我在这里所做的事情有问题吗?

更新

关于从 PC (Chrome) 浏览器测试各种 URL,以下是我尝试过的方法及其结果:

// hostname / machine name:
"http://shannon2:21608/api/inventory/sendxml/bla/bla/bla" gives me:

HTTP 错误 503。服务不可用。

// IP Address:
"http://192.168.125.50:21608/api/inventory/sendxml/bla/bla/bla" gives me:

<Error>
<Message>
The requested resource does not support http method 'GET'.
</Message>
</Error>

// locohost:
"http://localhost:21608/api/inventory/sendxml/bla/bla/bla" gives me the same response as using the IP Address (192.168.125.50) above.

// locohost as IP Address
"http://127.0.0.1:21608/api/inventory/sendxml/bla/bla/bla" also gives me the same response as using the IP Address (192.168.125.50) or localhost as shown above.

更新 2

尝试通过手持设备的 (IE) 浏览器访问资源:

在 URL 中使用 127.0.0.1 会导致浏览器响应“找不到服务器或 DNS 错误

使用 192.168.125.50(我的 PC 的 IP 地址)响应“HTTP 405 - 找不到资源

更新 3

在答案 (here) 中引用的 Gretelman 帖子中,它说要这样做:

netsh http add urlacl url=http://hanselman-w500:80/ user=everyone

...从命令提示符;就我而言,这将是:

netsh http add urlacl url=http://shannon2:80/ user=everyone

但这不是只开放访问端口 80 的尝试吗?我需要访问 REST Web API 方法期望的端口,即 21608...

我应该这样做吗:

netsh http add urlacl url=http://shannon2:21608/ user=everyone

?

更新 4

我可以在命令提示符下正确执行以下操作:

iisexpress.exe site:"HHS.Web"

它显示为在 IIS Express 中运行——实际上,HSS.Web 在运行该命令之前已启动(我可以通过右键单击 IIS Express 任务栏图标并选择“显示所有应用程序”来看到),以及HHS.API,但我运行它以查看它是否会返回任何错误消息,根据建议here

更新 5

特别是作为更新 3 的后续行动,它是这样的:

netsh http add urlacl url=http://shannon2:80/ user=everyone

...或者这个:

netsh http add urlacl url=http://shannon2:8080/ user=everyone

...成功了——我现在终于可以在运行这些命令后从手持设备上命中服务器上的断点(使用我机器的主机名向大众开放端口 80 和 8080)。哪个是必要的,或者他们是否都是,我不知道。我已经添加了“21608”和“21609”的命令,所以它们不是解决方案:

【问题讨论】:

【参考方案1】:

在考虑通过网络/域公开与 IIS Express 应用程序实例的连接时,您必须修改 HTTP.SYS 和防火墙入站规则。

另外,我建议您在绑定中使用您的计算机名称。

这是一篇介绍此配置以及其他注意事项的参考文章:http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

本文介绍了使用两种方法/过程(标记为 Easy & Ninja/Hard)在标准端口 80 上为 IIS Express 实例提供外部流量访问。它还涵盖了信任自签名证书和 ASP.NET URL 重写规则以访问和处理通过 https (SSL) 到您的应用实例的连接的过程。

它非常冗长,如果它为您提供所需的信息,我可能会用该信息更新此答案。 (我想它会的)..

编辑:

似乎涵盖您的问题(您此时已解决)的最合适的文章是 [http://www.iis.net/learn/extensions/using-iis-express/handling-url-binding-failures-in-iis-express],正如 SO Post [Configure IIS Express for external access to VS2010 project] 所引用的那样。

【讨论】:

我需要访问我的PC,其IP地址是192.168.125.50,并且需要一个端口号为21608的REST调用。 这很好.. 但是使用您的网络地址(分配的路由器)访问您的计算机当然意味着该端口上的 IIS Express 的网络可访问性。考虑在整个测试过程中放弃防火墙。请参阅此 SO 帖子:***.com/questions/5433786/… 配置 applicationhost.config 文件 答案在于修改 HTTP.SYS 以允许外部流量到 IIS Express,当然,也可以使用 applicationhost.config 进行绑定 “让您的应用程序重新启动并运行,然后在地址栏中尝试 127.0.0.1:21608 为您的 HHS.WEB 站点/实例.. 和 127.0.0.1:21609 为您的 HHS.API 应用程序实例。”我会尝试,但我认为 127.0.0.1 与 localhost 基本相同,因此手持设备将自行查找该端口,而不是在通过 USB 和 ActiveStync 连接的 PC 上。 我之前没有在你的问题中看到“手持”的说法。我只是想让你明确说明你正在使用/输入什么“URL”。它应该毕竟要发表评论:P

以上是关于如何解决 HTTP“404”和“405”错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

打开网页出现“405 Not Allowed”,是啥意思?怎么解决?

如何解决 HTTP 错误 405

servlet 500,405错误

在带有 HTTP 状态代码 405 的 REST API 中返回啥错误消息?

web程序常见错误及解决方法

web程序常见错误及解决方法