WebDAV Server Engine for .NET问题

时间:2012-11-13 22:45:22

标签: .net webdav

  1. 如果某个自定义文档状态适用,如何强制以只读模式打开文件?例如,文档可以经历各个阶段:创建,审阅和批准。一旦获得批准,没有人可以修改它。

  2. 如何通过WebDAV Server Engine for .NET API告知客户端不支持某些操作,例如移动和复制文件。

3 个答案:

答案 0 :(得分:1)

  

“如何强制以只读模式打开文件......”

如果您使用的是Windows资源管理器(Windows Shell / Miniredirector / WebFolders)和MS Office,则可以实现IMsItem,它将返回该项目的文件属性。在您的IMsItem.GetFileAttributes方法实现中添加只读标志:

/// <summary>
/// Returns Windows file attributes (readonly, hidden etc.) for this file/folder.
/// </summary>
/// <returns>Windows file attributes.</returns>
public FileAttributes GetFileAttributes()
{
    if (Name.StartsWith("."))
    {
        return fileSystemInfo.Attributes | FileAttributes.Hidden;
    }
    return fileSystemInfo.Attributes | FileAttributes.ReadOnly;
}

但是,此代码实际上并不保护您的文件不被其他用户/应用程序覆盖。要保护文件不被修改,您必须检查用户是否具有足够的权限来修改IFile.Write实施中的文件。

答案 1 :(得分:0)

如果您想在所有情况下禁止复制和移动操作,请执行以下操作:

public override void CopyTo(IItemCollection folder, string destName, bool deep, MultistatusException multistatus)
{
    throw new DavException("Cannot copy resource", DavStatus.NOT_ALLOWED);
}

public override void MoveTo(IItemCollection folder, string destName, MultistatusException multistatus)
{
    throw new DavException("Cannot move resource", DavStatus.NOT_ALLOWED);
}

如果您想根据某些条件禁止复制/移动/更改资源,我建议您使用自定义处理程序:

public Service(ILogger logger, bool isApplication)
{
    ...
    MyCustomPutHandler handler = new MyCustomPutHandler();
    handler.OriginalHandler = engine.RegisterMethodHandler("PUT", handler);
}

internal class MyCustomPutHandler : IMethodHandler
{
    public IMethodHandler OriginalHandler { get; set; }

    public void ProcessRequest(DavContextBase context, IHierarchyItem item)
    {
        if(<check condition>)
        {
            throw new DavException("Cannot change resource", DavStatus.Conflict);
        }
        if (item is IFolder)
        {
            ...
        }
        else
        {
            OriginalHandler.ProcessRequest(context, item);
        }
    }
     ......
}

希望这会对你有所帮助。

答案 2 :(得分:0)

  

“如何通过WebDAV Server Engine for .NET api告诉客户端   某些操作不受支持,例如移动和   复制文件。“

假设您可以从为响应OPTIONS请求而返回的Allow和Public标题中删除删除COPY和MOVE谓词(请参阅下面的示例)。您需要致电:

engine.RegisterMethodHandler("COPY", null);
engine.RegisterMethodHandler("MOVE", null);

但是,根据我的经验,Microsoft Miniredirector和Microsoft Office可能会在此之后变得无法使用。 Microsoft Office可能以只读方式打开文件。如果您需要支持MS Office和Miniredirector,我建议将所有动词保留在Allow和Public标头中。正如Taras在答案中建议的那样,只需在CopyTo和MoveTo实现中抛出DavException。

选项请求的示例:

OPTIONS http://ajaxbrowser.com/Userb7d072f HTTP/1.1
translate: f
User-Agent: Microsoft-WebDAV-MiniRedir/6.0.6002
Host: ajaxbrowser.com
Content-Length: 0
Connection: Keep-Alive


HTTP/1.1 200 OK
Allow: COPY, DELETE, GET, HEAD, LOCK, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, UNLOCK
Content-Length: 0
Accept-Ranges: bytes
Server: Microsoft-HTTPAPI/1.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: ACL, CANCELUPLOAD, CHECKIN, CHECKOUT, COPY, DELETE, GET, HEAD, LOCK, MKCALENDAR, MKCOL, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, UNCHECKOUT, UNLOCK, UPDATE, VERSION-CONTROL
Access-Control-Allow-Headers: Overwrite, Destination, Content-Type, Depth, User-Agent, Translate, Range, Timeout, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control
Access-Control-Max-Age: 2147483647
X-Engine: IT Hit WebDAV Server .Net v3.0.556.0 (Evaluation License)
DAV: 1, 2, 3
Public: COPY, DELETE, GET, HEAD, LOCK, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, UNLOCK
MS-Author-Via: DAV
Date: Fri, 23 Nov 2012 20:26:51 GMT
相关问题