【发布时间】:2015-10-22 15:50:49
【问题描述】:
我正在编写一个 IHttpHandler。我的环境是 Windows 7 Enterprise,IIS 7(出现)。我的处理程序作为应用程序在默认应用程序池下运行,该应用程序池以集成模式运行。
目前我的处理程序的 ProcessRequest() 方法仅执行以下操作(此时只是测试):
public void ProcessRequest(HttpContext context)
{
context.Response.StatusCode = 200;
context.Response.ContentType = "text/html";
context.Response.Output.Write("file uploaded.");
}
我通过 web.config 添加我的处理程序,如下所示:
<configuration>
<system.webServer>
<handlers>
<add name="HttpUpload" path="*" verb="*" type="HttpUpload, HttpUpload" resourceType="Unspecified"/>
</handlers>
</system.webServer>
</configuration>
我正在使用 curl 来测试我的处理程序。当我执行以下操作时:
curl http://localhost/httpupload/foo
它有效。但是,当我尝试按如下方式执行 PUT 时:
curl --upload-file build.txt http://localhost/httpupload/foo
失败并出现 405,不允许方法,错误。我四处搜索,stackoverflow 上的其他人表示需要删除 WebDAVModule。我删除了它,它确实解决了 405 错误。但是,现在我收到 500.21 错误。从失败的请求跟踪中可以看出,“IIS Web Core”模块正在生成 500.21 错误,因为“数据无效”。 (8007000d)。这个问题似乎与这篇文章类似:
IIS 7, HttpHandler and HTTP Error 500.21
然而,似乎可以为其他人解决问题的方法,例如运行 aspnet_regiis -i,对我没有任何影响。我调试了我的处理程序,它在使用 GET 时中断了我的处理程序的 ProcessRequest() 方法,但在使用 PUT 时它没有中断,因此我知道它甚至没有被调用。由于某种原因,这个其他核心模块调用失败。
编辑:
我针对相同的 URL 执行了一个 curl 命令,该 URL 执行了 POST 并且有效。所以 GET 和 POST 对我的 http 处理程序起作用,而 PUT 没有。我还对由 WebDAV 支持的同一个框上的 URL 执行了相同的 --upload-file curl 命令,并且有效。
谢谢, 尼克
【问题讨论】:
标签: iis httphandler put