【问题标题】:Can't PUT to my IHttpHandler, GET works fine无法 PUT 到我的 IHttpHandler,GET 工作正常
【发布时间】: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


    【解决方案1】:

    好吧,我继续四处搜索,在查看配置文档的同时,我看到了以下内容:

    runManagedModulesForWebDavRequests

    阅读以下文档时:

    https://www.iis.net/configreference/system.webserver/modules

    我设置为真

    <modules runManagedModulesForWebDavRequests="true">
    

    瞧,PUT 现在适用于我的 http 处理程序。我想一旦您安装了 WebDAV,那么所有 PUT 都与 WebDAV 相关联?我不知道,但看起来是这样的。所以看起来如果你安装了 WebDAV,你需要禁用它,然后将此标志设置为 true。

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2013-06-16
      • 2014-10-20
      • 2022-01-02
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多