2012-03-28 203 views
6

我开始尝试使用iisnode和expressjs来创建一个类似REST的节点。所以在server.jsiisnode - IIS7.5:405执行PUT请求时不允许使用方法

我创建类似

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

然而,当我执行PUT请求我从IIS 7.5的安装得到了405 Method not allowed

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

顺便说一句,我用Google搜索已经并试图用没有成功在这里和那里添加PUT动词的不同处理程序映射...

+0

这99%肯定的东西在IIS,所以我敢肯定,你错过了一些东西在那里。但是,我真的不能看你的IIS配置:-) – 2012-03-28 15:14:06

+0

这就是为什么我只是不明白为什么任何人,但一个受虐狂会想使用IIS来托管节点... – UpTheCreek 2012-03-29 07:14:44

+0

:)我想这只是因为你可能有限制,只是运行IIS的Web服务器...在我的情况下,因为我想部署它到AppHarbor,因为它是更适合(从成本的角度来看)我的实验(比Heroku)。 – Juri 2012-03-29 07:48:52

回答

21

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

要解决的问题:

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

然后它为我工作。

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

<system.webServer> 
    ... 
    <modules> 
     <remove name="WebDAVModule"/> 
    </modules> 
</system.webServer> 
2

其中一个原因可能是你的web.config不映射特殊请求您正在对iisnode处理程序进行操作。 https://github.com/tjanczuk/iisnode/blob/master/src/samples/helloworld/web.config#L7

:在这种情况下,请求被不支持PUT方法,并用405

响应要解决这个问题,你需要这样的iisnode程序登记在你的web.config静态请求处理程序回升

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

+0

Thx为您的答案,但我已经找到您的博客文章,并相应地配置我的应用程序......没有任何成功。不过,我现在已经找到了解决方案。 (见下文) – Juri 2012-03-29 07:06:06