如何在強制使用某個自定義文檔狀態的情況下強制以只讀模式打開文件?例如,文檔可以經歷不同的階段:創建,審覈,批准。一旦獲得批准,沒有人可以修改它。用於.NET問題的WebDAV服務器引擎
如何通過WebDAV Server Engine for .NET API告訴客戶端某些操作不受支持,例如移動和複製文件。
1
A
回答
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);
}
}
......
}
希望這會幫助你。
0
「我怎麼知道,通過對.NET API WebDAV服務器引擎 某些操作不支持客戶端,例如移動和 複製文件。」
可以想像你可以刪除刪除複製並允許與公共頭部響應OPTIONS請求(見下面的例子)返回MOVE動詞。您需要致電:
engine.RegisterMethodHandler("COPY", null);
engine.RegisterMethodHandler("MOVE", null);
但是,根據我的經驗,Microsoft Miniredirector和Microsoft Office可能在此之後變得不可用。 Microsoft Office可能會以只讀方式打開文件。如果您需要支持MS Office和Miniredirector,我建議將所有動詞保留在允許和公共標題中。就像塔拉斯在他的回答中所建議的那樣,只要在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
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. 。基於.Net的常見問題引擎
- 2. 3服務引擎索引的問題
- 3. 容器引擎上的服務訪問
- 4. BPM引擎與BPM引擎服務器
- 5. 用於.NET的Microsoft符號服務器 - 問題
- 6. nginx的WebDAV服務器
- 7. 從服務器鏈接訪問WebDAV
- 8. .NET進程外#服務器的問題
- 9. .NET插座的問題:從服務器
- 10. Sphorium WebDAV服務器框架
- 11. 設置ITHit WebDAV服務器
- 12. 構建WebDAV服務器
- 13. Webdav(Sabredav)服務器配置
- 14. 哪個引擎用於託管Google雲上的perforce服務器?
- 15. .NET TCP服務器穩定性問題
- 16. MVC .NET +服務器部署問題
- 17. Java .net服務器語法問題
- 18. asp net mvc sql服務器問題
- 19. 開發服務器中的谷歌應用引擎中的圖像問題
- 20. 適用於基於服務的應用的開源GIS引擎
- 21. 谷歌應用引擎網址提取服務iurl問題
- 22. 應用服務引擎反向參考問題
- 23. 包括對.NET網站的服務引用的問題
- 24. 適用於.NET平臺的BPEL引擎
- 25. 使用Google Apps引擎的外部SMTP服務器/服務
- 26. IT打擊WebDAV服務器的.NET返回自定義屬性
- 27. Web服務.NET Framework問題
- 28. .NET RIA服務 - DataService問題
- 29. 問題.net窗口服務
- 30. 適用於iOS的任何webdav或ftp服務器源代碼?