WebDav PROPPATCH方法状态HTTP / 1.1 424失败的依赖关系

时间:2013-07-31 17:50:51

标签: webdav

我正在尝试访问和修改我之前上传到webdav网址的文件的属性'creationdate'和'lastmodified'。我收到的响应是“HTTP / 1.1 424失败的依赖关系”,根据https://tools.ietf.org/html/rfc4918,我将其解释为“由于先前请求失败而导致请求失败”。

我很遗憾以前的请求在这里失败了,因为当我运行代码时,我没有收到任何错误。 这是代码:

FileInfo^ myfI=gcnew FileInfo(myfilePath);
String^ mytime=myfI->LastWriteTimeUtc.ToFileTimeUtc().ToString();
String^ strBody = "<?xml version=\"1.0\"?>"
            + "<d:propertyupdate xmlns:d=\"DAV:\">"
            + "<d:set>"
            + "<d:prop>"
            + "<creationdate>" + myfI->CreationTimeUtc.ToFileTimeUtc().ToString() + "</creationdate>"
            + "</d:prop>"
            + "<d:prop>"
            + "<lastmodified>" + mytime + "</lastmodified>"
            + "</d:prop>"
            + "</d:set>"
            + "</d:propertyupdate>";

array<Byte>^ mybytes= Encoding::UTF8->GetBytes(strBody);

String^ responseresult="";
String^ filename= myfI->Name;
System::Net::HttpWebRequest^ httpPutRequest = (System::Net::HttpWebRequest^)System::Net::WebRequest::Create(this->myURL + destinationpath+ "/" + filename);
    httpPutRequest->Credentials = gcnew NetworkCredential(this->myUserName, this->myPassword);
    httpPutRequest->PreAuthenticate = true;
    httpPutRequest->Method = L"PROPPATCH";
httpPutRequest->ContentType = "text/xml";
httpPutRequest->ContentLength = mybytes->Length;
Stream^ requestStream = httpPutRequest->GetRequestStream();
requestStream->Write(mybytes,0,mybytes->Length);
requestStream->Close();

HttpWebResponse^ httpPutResponse = (HttpWebResponse^)httpPutRequest->GetResponse();
responseresult=httpPutResponse->StatusDescription;
HttpStatusCode mycode=httpPutResponse->StatusCode;
Stream^ myresponse=httpPutResponse->GetResponseStream();
StreamReader^ myr=gcnew StreamReader(myresponse);
String^ res=myr->ReadToEnd();

我也尝试过只有一个属性并且有相同的响应。

有任何建议吗?

1 个答案:

答案 0 :(得分:2)

回应整个回复非常重要。在以下情况下将发出失败的依赖关系:

  1. 您正在进行PROPPATCH以更新超过1个属性
  2. 其中一个属性失败(例如403 Forbidden)
  3. 其他属性现在将自动获得424 Failed Dependency,因为PROPATCH必须完全成功或完全失败。
  4. 我的猜测是您的服务器不允许您更新其中一个或多个属性。 {DAV:}lastmodified通常是受保护的,因此是一个永远不允许更改的只读属性。它取决于服务器是否实际允许你这样做,但通常它会失败。