版本 URL 完全取决于服务器实现。WebDAV 向导为 Visual Studio 表单版本 url 生成的代码如下:
http://server/path/file.ext?version=1
要在 JavaScript 中获取客户端特定文件的文件版本列表,您可以使用IT Hit WebDAV Ajax 库。文件。GetVersionsAsync () 方法返回一个Version对象数组。每个 Version 对象都有一个Href属性,它是一个版本 URL:
var webDavSession = new ITHit.WebDAV.Client.WebDavSession();
webDavSession.OpenFileAsync('http://server/path/file.ext', function(oAsyncResultFile) {
var oFile = oAsyncResultFile.Result;
oFile.GetVersionsAsync(function(oAsyncResultVersions) {
var aVersions = oAsyncResultVersions.Result;
for(var i=0; i<aVersions.length; i++)
{
console.log(aVersions[i].Href);
}
});
});
如果您希望自己获取版本列表请求,这里是请求和响应的示例:
REPORT http://localhost:7865/DAV/qtest_1417713485047/Versions/ver.txt
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0"?><version-tree xmlns="DAV:"><prop><displayname/><creationdate/><getcontenttype/><getcontentlength/><version-name/><creator-displayname/><comment/></prop></version-tree>
207 Multi-Status
X-Engine: IT Hit WebDAV Server .Net v3.9.2075.0 (Evaluation License)
Date: Thu, 04 Dec 2014 17:19:10 GMT
Content-Type: application/xml; charset=utf-8
Content-Length: 667
<?xml version="1.0" encoding="utf-8"?>
<d:multistatus xmlns:d="DAV:">
<d:response>
<d:href>http://localhost:7865/DAV/qtest_1417713485047/Versions/ver.txt?version=1</d:href>
<d:propstat>
<d:status>HTTP/1.1 200 OK</d:status>
<d:prop>
<d:displayname>ver.txt</d:displayname>
<d:creationdate>2014-12-04T17:19:10Z</d:creationdate>
<d:getcontenttype>text/plain;charset=UTF-8</d:getcontenttype>
<d:getcontentlength>6</d:getcontentlength>
<d:version-name>V1</d:version-name>
<d:creator-displayname />
<d:comment />
</d:prop>
</d:propstat>
</d:response>
</d:multistatus>
重要的!由 Visual Studio 的 WebDAV 向导生成的代码会生成带有参数的版本 URL。Microsoft Office 在打开文档时会截断参数。这就是为什么如果要将版本保存回服务器,则必须更改服务器实现以生成不带参数的版本 urs。版本 URL 必须如下所示:
http://server/path/file.ext/<v1>
生成版本 URL 的代码位于 Version.cs 文件中:
public static string CreateVersionPath(string itemPath, int versionNumber)
{
return itemPath + "?version=" + versionNumber;
}
解析版本 url 并将版本对象返回给引擎的代码在 DavContext.cs 文件中:
public override IHierarchyItem GetHierarchyItem(string path)
{
path = path.Trim(new[] { ' ', '/' });
if (path.Contains("?version="))
{
return readVersion(path);
}
…
}