gpt4 book ai didi

asp.net-mvc - 在 MVC 操作上处理 WebDAV 请求

转载 作者:行者123 更新时间:2023-12-04 05:03:23 24 4
gpt4 key购买 nike

我有一个现有的 MVC3 应用程序,它允许用户上传文件并与他人共享。目前的模式是,如果用户想要更改文件,他们必须删除那里的文件并重新上传新版本。为了改善这一点,我们正在研究集成 WebDAV 以允许在线编辑 Word 文档等内容。

到目前为止,我一直在使用来自 http://www.webdavsystem.com/ 的 .Net 服务器和客户端库。将网站设置为 WebDAV 服务器并与之对话。

但是,我们不希望用户直接与 WebDAV 服务器交互(我们有一些复杂的规则,用户可以根据域逻辑在某些情况下做什么),而是通过我们以前用于访问文件的 Controller 操作。

到目前为止,它正在工作到我们可以返回文件的程度,并且它给出了打开文件的 WebDAV-y 类型提示。

问题是它总是停留在只读模式。如果我使用直接的 WebDAV URL 但不是通过我的 Controller 操作,我已经确认它可以工作并且可以编辑。

使用 Fiddler 我想我发现问题在于 Word 正试图与服务器协商关于锁定的位置,但该位置未返回正确的详细信息。用于下载文件的 Controller 操作是“/Files/Download?filePath=bla”,因此 Word 在发送 OPTIONS 请求时会尝试与“/Files”对话。

我是否只需要在那个位置执行一个操作来知道如何响应 OPTIONS 请求,如果是这样,我将如何进行响应?或者,是否有另一种方法可以做到这一点,也许是通过向响应添加一些属性来通知 Word 应该查找的位置?

这是我的 Controller 操作:

public virtual FileResult Download(string filePath)
{
FileDetails file = _fileService.GetFile(filePath);
return File(file.Stream, file.ContentType);
}

这是文件服务方法:
public FileDetails GetFile(string location)
{
var fileName = Path.GetFileName(location);
var contentType = ContentType.Get(Path.GetExtension(location));
string license ="license";
var session = new WebDavSession(license) {Credentials = CredentialCache.DefaultCredentials};
IResource resource = session.OpenResource(string.Format("{0}{1}", ConfigurationManager.AppSettings["WebDAVRoot"], location));
resource.TimeOut = 600000;
var input = resource.GetReadStream();
return new FileDetails { Filename = fileName, ContentType = contentType, Stream = input };
}

这还为时过早,所以我很感激我可能以完全错误的方式做这件事,所以欢迎任何形式的帮助。

最佳答案

最后,似乎更好的选择是允许用户直接与 WebDAV 服务器对话并实现身份验证逻辑来​​控制它。

IT Hit 服务器具有扩展,允许您使用 Office 的基本或摘要式身份验证针对站点其余部分的表单例份验证进行身份验证。使用它以及对项目请求逻辑的其他一些自定义给我们提供了我们需要的东西。

关于asp.net-mvc - 在 MVC 操作上处理 WebDAV 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15840273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com