我是法国ThinkProject的开发工程师。我们从“ IT Hit WebDAV Server for .NET”和“ IT Hit WebDAV AJAX库”购买了永久许可。
我们需要在WebDav服务器中建立会话控制机制。我们希望在所有Webdav请求中控制另一个应用程序上的SessionId有效。
为此,其他应用程序发送的所有Webdav请求URL均采用"SERVER/WEBDAVAPP/[SESSIONID]/Folder1/File.txt"
的形式。
我们在Webdav服务器的项目中创建了一个HttpModule类。
public class LascomPLMHttpModule: IHttpModule
此HttpModule
在Web.config中设置。
然后在HttpModule
中输入
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(Context_BeginRequest);
}
private void Context_BeginRequest(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
// We get the SESSIONID in url and check this session Id in our other application
// If OK then we extract SESSIONID from url and RewritePath in context
string l_path = "http://SERVER/WEBDAVAPP/Folder1/File.txt";
context.RewritePath(l_path);
}
Webdav服务器上不存在路径“ SERVER / WEBDAVAPP / [SESSIONID] /Folder1/File.txt”。
路径"SERVER/WEBDAVAPP/Folder1/File.txt"
在Webdav服务器上。
使用“ IT Hit WebDAV AJAX库”执行以下JavaScript调用时:
var oFile = webDavSession.OpenFile ("http://SERVER/WEBDAVAPP/[SESSIONID]/Folder1/File.txt");
HTTP请求是URL“ http://SERVER/WEBDAVAPP/[SESSIONID]/Folder1/File.txt”上类型为PROPFIND的请求。
我们很好地通过了Webdav服务器的HttpModule。 我们的HttpModule将URL“ http://SERVER/WEBDAVAPP/[SESSIONID]/Folder1/File.txt”转换为“ http://SERVER/WEBDAVAPP/Folder1/File.txt”并执行context.RewritePath。 Webdav处理程序已正确处理文件“ http://SERVER/WEBDAVAPP/Folder1/File.txt”上的PROPFIND请求,并返回正确的答案:
<?xml version="1.0" encoding="utf-8"?>
<d:multistatus xmlns:d="DAV:">
<d:response>
<d:href>http://SERVER/WEBDAVAPP/Folder1/File.txt</d:href>
<d:propstat>
<d:status>HTTP/1.1 200 OK</d:status>
<d:prop>
<d:resourcetype />
<d:displayname>Conges.txt</d:displayname>
<d:creationdate>2018-06-12T12:56:11Z</d:creationdate>
<d:getlastmodified>Tue, 19 Jun 2018 11:29:43 GMT</d:getlastmodified>
<d:getcontenttype>text/plain</d:getcontenttype>
<d:getcontentlength>14</d:getcontentlength>
<d:supportedlock>
<d:lockentry>
<d:lockscope>
<d:exclusive />
</d:lockscope>
<d:locktype>
<d:write />
</d:locktype>
</d:lockentry>
<d:lockentry>
<d:lockscope>
<d:shared />
</d:lockscope>
<d:locktype>
<d:write />
</d:locktype>
</d:lockentry>
</d:supportedlock>
<d:lockdiscovery />
</d:prop>
</d:propstat>
<d:propstat>
<d:status>HTTP/1.1 404 Not Found</d:status>
<d:prop>
<d:quota-available-bytes />
<d:quota-used-bytes />
<d:checked-in />
<d:checked-out />
</d:prop>
<d:responsedescription>Property was not found</d:responsedescription>
</d:propstat>
</d:response>
</d:multistatus>
但是,javascript调用webDavSession.OpenFile ("http://SERVER/WEBDAVAPP/[SESSIONID]/Folder1/File.txt");
会导致错误:
未捕获的异常:找不到文件夹。 http://SERVER/WEBDAVAPP/[SESSIONID/Folder1/File.txt
您能否测试这种类型的机制,并告诉我们为什么Webdav服务器正确处理了http请求,但是我们仍然收到JavaScript错误“找不到文件夹”