【问题标题】:Reasons for a 409/Conflict HTTP error when uploading a file to sharepoint using a .NET WebRequest?使用 .NET WebRequest 将文件上传到共享点时出现 409/冲突 HTTP 错误的原因?
【发布时间】:2011-10-10 17:34:51
【问题描述】:

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

当上传多个文件时(方法被多次调用),一些请求会失败并出现 409 Conflict HTTP 错误。

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

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

【问题讨论】:

    标签: .net sharepoint httpwebrequest webrequest


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      出于不同的原因,我多次遇到此问题。我会在这里列出其中的一些。

      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}`
           
      

      【讨论】:

        【解决方案3】:

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

        在我的例子中,我将一个文件夹命名为 contact,结果发现该名称被阻止用作文件夹名称。

        postman 上测试我的脚本时,我收到了这个错误:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            这是因为提供了错误的路径。可能是 url 包含空格,如果 case url 必须正确构造。

            正确的 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”并应使用。

            【讨论】:

              【解决方案6】:

              【讨论】:

                【解决方案7】:

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

                除了上面提到的问题,它也可能由于服务器端 POST 的文件大小限制而发生。例如,tomcat(java web server)默认有POST size limit of 2MB

                【讨论】:

                  【解决方案8】:

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

                  【讨论】:

                    【解决方案9】:

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

                    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 包含文件名,并且路径中的所有文件夹都存在于共享点站点上。

                    无论如何,我希望这对某人有所帮助。

                    【讨论】:

                      【解决方案10】:

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

                      示例:

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

                      【讨论】:

                        猜你喜欢
                        • 2021-04-03
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-11-28
                        • 2021-07-13
                        • 1970-01-01
                        相关资源
                        最近更新 更多