0

以前に webdav URL にアップロードしたファイルのプロパティ「creationdate」および「lastmodified」にアクセスして変更しようとしています。https://www.rfc-editor.org/rfc/rfc4918によると、「HTTP/1.1 424 Failed Dependency」という応答を受け取りました。

コードを実行してもエラーが発生しないため、ここで失敗した以前のリクエストについてはわかりません。コードは次のとおりです。

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つのプロパティだけで試しましたが、同じ応答がありました。

何かアドバイスをお願いします。

4

1 に答える 1

2

応答全体をエコーすることが重要です。失敗した依存関係は、次の場合に発行されます。

  1. PROPPATCH を実行して複数のプロパティを更新しようとしています
  2. これらのプロパティの 1 つが失敗します (たとえば、403 Forbidden)。
  3. PROPATCH は完全に成功するか、完全に失敗する必要があるため、他のプロパティは自動的に 424 Failed Dependency を取得します。

私の推測では、サーバーがこれらのプロパティの 1 つ以上を更新することを許可していないということです。{DAV:}lastmodified特に、一般に保護されているため、変更が許可されていない読み取り専用のプロパティです。実際にそれを許可するかどうかはサーバーによって異なりますが、一般的には失敗するはずです。

于 2013-07-31T19:58:52.570 に答える