如果我想允许 HTTP POST 到文本文件*。TXT(即,我正在举一个例子,说明通常可以通过 GET 访问的任何静态资源)。
错误是:
服务器错误
405- 不允许使用 HTTP 动词来访问此页面。无法显示您要查找的页面,因为尝试访问时使用了无效方法(HTTP 动词)。
我怎样才能做到这一点?
背景:我使用 apps.facebook.com 访问我托管的 Facebook 应用程序,Facebook 现在通过托管我应用程序的 iFrame 发送 HTTP POST。Facebook 的这种行为已经存在了一段时间,但现在是强制的。反过来,这迫使我让内容可用于 POST 动词。
答案1
我相信 IIS 支持大多数扩展类型的 POST。您使用的是 IIS7 还是 7.5?我刚刚在 IIS7.5 中使用 .txt 文件进行了测试,它可以很好地处理 POST。
我会检查您的 applicationHost.config (c:\windows\system32\inetsrv),搜索该部分并检查您的 StaticFile 处理程序,或者您是否已经有了适用于您的扩展类型的处理程序。您的 web.config 文件中可能也设置了相同的内容。确认 verbs 属性允许 POST。
答案2
一种快速解决方法是重命名为正确配置的文件类型,具体取决于您对需要管理员访问权限的应用程序的访问权限限制程度。例如,您可以将静态内容作为 aspx 文件提供。
将“file.txt”替换为“file.aspx”就完成了(如果 aspx 被允许处理 POST,默认情况下应该是这样的)。
答案3
我正在运行 IIS7,必须转到 IIS 管理器中我想要发布的文件夹,然后转到“请求过滤”,您可以添加“动词”,如发布、获取..
这将消除 405 错误。
答案4
我遇到了类似的问题。我们的应用程序试图将 POST 请求发送到 IIS 上托管的静态 json 文件。我通过更新 web.config 文件修复了这个问题:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="JSON" path="*.json" verb="GET,POST" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="File" requireAccess="None" />
</handlers>
<security>
<requestFiltering>
<fileExtensions>
<add fileExtension=".json" allowed="true" />
</fileExtensions>
<verbs>
<add verb="POST" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
</configuration>