无法使用IT HIT Webdav Ajax库访问HttpContext.RewritePath

时间:2018-08-13 18:13:20

标签: ithit-webdav-server

我是法国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错误“找不到文件夹”

0 个答案:

没有答案