8

我开始用 iisnode 和expressjs做一些实验,用 node创建一个类似 REST 的 API。

所以在 server.js 我创建了类似的东西

app.put("/test", function(req, res){
    ...
});

但是,当我执行 PUT 请求时,我会405 Method not allowed从 IIS 7.5 安装中获得一个。

关于如何解决这个问题的任何想法?

顺便说一句,我已经用谷歌搜索并尝试在不同的处理程序映射中到处添加 PUT 动词,但没有成功......

4

2 回答 2

24

我现在终于找到了解决这个问题的方法,即 WebDavModule 阻止了我的 PUT 请求。

要解决此问题:

  1. 打开你的 IIS 管理器
  2. 转到您的应用程序配置并打开“模块”
  3. 搜索 WebDavModule 并将其删除(右侧菜单)

然后它对我有用。

或者,在您的应用程序的 web.config 添加

<system.webServer>
    ...
    <modules>
       <remove name="WebDAVModule"/>
    </modules>
</system.webServer>
于 2012-03-29T07:07:24.190 回答
3

一个原因可能是您的 web.config 没有将您发出的特定请求映射到 iisnode 处理程序。在这种情况下,请求由不支持 PUT 方法的静态请求处理程序获取,并以 405 响应。

要解决此问题,您需要在 web.config 中像这样注册 iisnode 处理程序:https ://github.com/tjanczuk/iisnode/blob/master/src/samples/helloworld/web.config#L7

此外,如果您打算使用不以 node.js 文件名称结尾的 URL(就像上面的情况一样),您将需要使用 URL 重写模块来准确告诉 IIS 哪些请求应该有它们的重写 URL 以指向 node.js 入口点的 URL。阅读更多:http ://tomasz.janczuk.org/2011/08/using-url-rewriting-with-nodejs.html

于 2012-03-28T17:01:43.300 回答