IIS 7.5 - Windows Server 2008 - 文件上载 405 错误.代码在Windows 2003服

本文关键字:Windows 代码 错误 2003 文件 Server 2008 IIS 上载 | 更新日期: 2023-09-27 18:32:38

我遇到了一个问题,以下代码在 Windows 2003 机器上工作,现在我们正在升级到 2008 并且它不再工作。 当代码到达getResponse()时,它给了我一个405错误。

我正在通过 IIS 写入虚拟目录。
我也尝试将其制作为应用程序,但没有区别。我们没有安装/启用 webdav。

到处搜索,似乎找不到正确的解决方案来允许我编写文件。

我已经包含了用于上传文件的基本代码......

saveLocation.Length = 0;
saveLocation.Append(Path.GetFileName(files[0]));
   inStream = File.Open(files[0], FileMode.Open);
    HttpWebRequest myWebRequest =    (HttpWebRequest)WebRequest.Create("http://localhost/kw/archive/testFile.pdf");
      myWebRequest.ContentType = contentType;
      myWebRequest.Method = "put";
      //myWebRequest.Headers.Add("action", "put");
      myWebRequest.Headers.Add("filename", saveLocation.ToString());
      myWebRequest.ContentLength = inStream.Length;
      dataToRead = (int)inStream.Length;
      outStream = myWebRequest.GetRequestStream();
      while (dataToRead > 0) {
        if (Response.IsClientConnected) {
          length = inStream.Read(buffer, 0, 10000);
          outStream.Write(buffer, 0, length);
          buffer = new Byte[10000];
          dataToRead = dataToRead - length;
        }
        else {
          dataToRead = -1;
        }
      }
      HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
      myWebResponse.Close();
      inStream.Close();
      outStream.Close();

更新:我目前收到 405 错误。

IIS 7.5 - Windows Server 2008 - 文件上载 405 错误.代码在Windows 2003服

> 405 错误表示不允许使用方法。在上面的代码中,您使用"PUT"方法,我认为IIS中不允许使用此方法。尝试启用此功能,然后检查此按钮。如果您知道如何启用此功能,请尝试一下,如果您不知道,请检查此链接。我希望这将解决您的问题。

405 表示方法不允许 - 最可能的原因是 PUT 谓词未通过 IIS 设置被允许。我相信这是一个在 IIS6 和 IIS7 之间收紧的安全设置,因为默认情况下现在阻止了 PUT 和 DELETE 请求。

若要在站点设置下的 IIS 管理器中启用 PUT 请求,有一个标记为"请求筛选"的图标。如果你打开它,你会看到许多选项卡,其中一个称为HTTP动词,切换到这个。从右侧的"操作面板"中选择"允许谓词",在出现的对话框中键入 PUT,然后选择"确定"。

或者,您可以将以下内容添加到 web.config 文件中:

<security>
    <requestFiltering>
        <verbs allowUnlisted="false">
            <add verb="PUT" allowed="true" />
        </verbs>
    </requestFiltering>
</security>

如果这不起作用,我们需要更多地了解此呼叫的接收端是什么。接收请求的代码是什么?

IIS

6 使用 Network Service 帐户作为 IT 工作进程,IIS 7 使用 DefaultAppPool 标识。

检查物理文件夹是否具有 DefaultAppPool 标识的写入访问权限。

请参阅此文章,了解如何将 DeaultAppPool 标识添加到文件夹。

http://www.iis.net/learn/manage/configuring-security/application-pool-identities