使用.NET WebRequest将文件上载到sharepoint时出现409 / Conflict HTTP错误的原因?

时间:2011-07-22 02:20:55

标签: .net sharepoint httpwebrequest webrequest

我有一个方法,使用WebRequest将文件上传到sharepoint 2010列表/文件夹,使用PUT请求,并将Overwrite Header设置为T(覆盖)。

当上传多个文件(多次调用方法)时,某些请求会因409 Conflict HTTP错误而失败。

我用谷歌搜索,似乎最常见的原因是试图影响/更新不存在的文件(比如将请求URL设置为没有文件名的路径)。但事实并非如此。如果冲突与已经存在的文件有关,我在上传之前添加了代码来物理删除文件,我仍然得到了一些409。

有没有人收到过这种类型的错误,如果有的话,你能告诉我你是如何解决的吗?根本原因是什么?任何帮助是极大的赞赏。感谢

10 个答案:

答案 0 :(得分:23)

由于没有发布答案,我找到了以下here

  

Web服务器(运行Web站点)认为客户端(例如您的Web浏览器或我们的CheckUpDown机器人)提交的请求无法完成,因为它与已建立的某些规则冲突。例如,如果您尝试将文件上载到比已经存在的文件更旧的Web服务器,则可能会收到409错误,从而导致版本控制冲突。

similar question right here on stackoverflow上有人说答案是:

  

当我引用文档的url时,我遇到了这个问题   库而不是目标文件本身。

     

即。试试http://server name/document library name/new file name.doc

但是我100%确定这不是我的情况,因为我多次检查了WebRequest的URI属性,并且URI完成了文件名,路径中的所有文件夹都存在于sharepoint站点上。

无论如何,我希望这有助于某人。

答案 1 :(得分:3)

我在使用webdav和http web请求上传文件时发现了两件值得一提的东西。首先,对于我使用的提供程序,我必须在提供程序URL的末尾附加文件名。我要在网址中附加端口号。我还将Request方法设置为PUT而不是POST。

示例:

string webdavUrl = "https://localhost:443/downloads/test.pdf";
request.Method = "PUT";

答案 2 :(得分:3)

有时,当您将文件夹或文件命名为保留或阻止名称时,会出现错误代码 409。这些名称可能是 registercontact

就我而言,我将文件夹命名为 contact,结果该名称被阻止用作文件夹名称。

postman 上测试我的脚本时,我收到此错误:

<script>
    document.cookie = "humans_21909=1"; document.location.reload(true)
</script>

我将文件夹名称从联系人更改为联系人,并且成功了。错误消失了。

答案 3 :(得分:1)

当我们尝试以毫秒为单位访问同一资源时,我们也遇到了同样的错误。就像我尝试POST某些数据到www.abc.com/blog并且以毫秒为单位时,其他请求也将来自同一用户的相同资源,即www.abc.com/blog。所以它会给出409错误。

答案 4 :(得分:0)

上传返回的文件时遇到类似的问题409。

除了上面提到的问题之外,由于服务器端POST的文件大小限制,也可能发生这种情况。例如,tomcat(java web服务器)默认为POST size limit of 2MB

答案 5 :(得分:0)

答案 6 :(得分:0)

这是因为提供的路径错误。可能是该网址包含空格,以及是否必须正确构造大小写网址。

正确的url格式应包含文件名,例如“ http://server名称/文档库名称/新文件名”

因此,如果report.xlsx是必须以“ http://server name / Team / Dev Team”上传的文件,则路径应为“ http://server name / Team / Dev Team / report.xlsx”。它包含空格,因此应将其重建为“ http://server name / Team / Dev%20Team / report.xlsx”,并应使用。

答案 7 :(得分:0)

由于不同的原因,我多次遇到此问题。我将在此处列出其中一些。

  1. Chrome 浏览器正在缓存请求。您可以在 Chrome 开发者控制台中禁用此功能,也可以在代码中使用标头 {cache: 'no-cache'}

  2. 放置文件时嵌套文件夹路径不存在。在将文件放入嵌套文件夹之前,请先确保该文件夹存在。

  3. 新文件和旧文件内容(大致)相同,提交信息也一样。只需将提交消息更改为更加随机化。在提交消息中使用类似的内容。

     const date = new Date()
     const timeStampHash = `${date.toISOString()}-${Math.floor(Math.random() * 1000)}`
     const commitMsg = `Commited from my App: #${timestampHash}`
     

答案 8 :(得分:-1)

我是因为您正在使用预定义变量来命名文件名。将您的文件名从例如register.asp更改为registerUser.asp。这样可以解决您的问题

答案 9 :(得分:-1)

请重命名您的 API 文件或文件夹名称 喜欢- xyz.com/注册.php 将其重命名为 xyz.com/myregister.php

某个名称,关键字在收到此错误时被阻止