关于此问题还有很多其他问题(特别是405方法不允许错误),但我还没有找到似乎有效的解决方案.
我有一个html和javascript的web应用程序(没有后端),javascript在表单中使用POST.我知道IIS看到html文件是静态的,只允许它们使用GET和HEAD动词,所以当一个表单发布时我得到“405 Method Not Allowed …”因为无效的方法(HTTP动词)而无法显示正在使用”.
组态
我在Win 7计算机上安装了IIS 7.默认情况下ISAPI / CGI / ASP等,WebDav都被禁用/未安装.我改变的唯一设置是为特征委派下的一些功能添加了读/写.
在默认站点上的Handler Mappings下,我有OPTIONSVerbHandler,TRACEVerbHandler和StaticFile. StaticFile请求限制仅在请求映射到文件或文件夹时显示所有启用的动词,访问读取,调用处理程序.
System.Web.DefaultHttpHandler属性显示动词GET,HEAD和POST.
到目前为止尝试过
如果我设置另一个处理程序映射,复制OPTIONS但将动词设置为POST,则405错误消失,但我得到一个空白页面.
正如在this问题的底部附近所建议的那样,我尝试将其添加到我的web.config中,但它似乎没有任何影响:
<add name="HttpPost"/>
(我也对配置GUI做了同样的事情,并且还添加了HttpPostLocalhost.)
我已经尝试在html(just in case)中将帖子更改为POST,但这没有任何效果.
我也尝试在请求过滤下明确允许动词,但这也没有帮助.
有没有人有任何其他想法?我认为如果我安装asp并更改我的所有文件扩展名,它将起作用,但这似乎是不必要的.
解决方法
由@ JudasIscariot1651链接的帖子有效,但是,它需要安装ASP并且如果你使用非ASP的后端语言(可能只是发布到html页面 – 我无法测试)会破坏你的网站.您需要配置用于处理html文件的任何语言而不是静态文件处理程序.
如果你没有使用后端语言,或者正在使用ASP,这里是ASP版本的副本(访问权限被修改为post中的示例) – 首先安装ASP和ISAPI:
<add name="html" path="*.html" verb="*" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="None" />
如果你正在使用PHP,你需要使用以下(调整PHP设置) – 可能你已经安装了PHP和CGI:
<add name="html" path="*.html" verb="*" modules="FastCgiModule" scriptProcessor="C:\Program Files (x86)\PHP\php-cgi.exe" resourceType="Unspecified" requireAccess="None" />