安装在 IIS 子应用程序上时,CKFinder 未使用自定义配置的连接器

CKFinder is not using the custom configured connector when installed on an IIS sub-application

我在 CMS 中使用 CKFinder 3.3,该 CMS 运行 在主网站的单独 ASP .Net 应用程序下(/__admin 有自己的应用程序)。该网站是一个 WebForms 应用程序。

问题是 CKFinder 连接器指向 /ckfinder/connector 而不是我设置的。显然我收到 IIS 404 响应,因为此路径未配置为根应用程序中的任何内容。

web.config

  <appSettings>
    <add key="ckfinderRoute" value="/connector" />

和 ckeditor 的用法类似

CKEDITOR.replace('ctl00_cphMain_fvItem_tbContent_Input',
   {
 filebrowserBrowseUrl: '/__admin/CKFinderScripts/ckfinder.html?=635999758837233543',
 filebrowserImageBrowseUrl: '/__admin/CKFinderScripts/ckfinder.html?type=Images&a=635999758837233543',
 filebrowserUploadUrl: '/__admin/connector?command=QuickUpload&type=Files',
 filebrowserImageUploadUrl: '/__admin/connector?command=QuickUpload&type=Images'                     
            });
CKEDITOR.timestamp='635999758837233543';

当 运行 在 Visual Studio 的主机 (Ctrl + F5) 下时,相同的设置工作正常。 值得一提的是,在 MVC 应用程序中,使用相同的设置,它工作正常。 CKFinder 是通过 web.config 中它自己的部分配置的,而不是通过 OWIN 启动 class 从代码中配置的。当我尝试这样做时 (Map(route, connectorSetup)) 我得到了相同的结果。

作为临时修复,我在网站根目录中添加了以下重写规则。

<rule name="connector">
          <match url="^ckfinder/connector"/>
          <action type="Rewrite" url="/__admin/connector"/>
</rule>

编辑:

我更改了连接器的设置方式。我现在通过 Startup class 进行操作,因此我可以控制 ckfinderRoute 的设置方式。看起来像

public void Configuration(IAppBuilder builder)
        {
            LoggerManager.LoggerAdapterFactory = new NLogLoggerAdapterFactory();

            RegisterFileSystems();

            var route = ConfigurationManager.AppSettings["ckfinderRoute"];
            builder.Map(route, SetupConnector);
        }

SetupConnector 方法正在从 web.config 加载设置并添加身份验证。我认为在这里显示代码是无关紧要的。

我也列出相关包

 <package id="CKSource.CKFinder" version="3.3.0" targetFramework="net461" />
  <package id="CKSource.CKFinder.Connector.Config" version="3.3.0" targetFramework="net461" />
  <package id="CKSource.CKFinder.Connector.Core" version="3.3.0" targetFramework="net461" />
  <package id="CKSource.CKFinder.Connector.Host.Owin" version="3.3.0" targetFramework="net461" />
  <package id="CKSource.CKFinder.Connector.KeyValue.EntityFramework" version="3.3.0" targetFramework="net461" />
  <package id="CKSource.CKFinder.Connector.Logs.NLog" version="3.3.0" targetFramework="net461" />
  <package id="CKSource.FileSystem" version="1.0.0" targetFramework="net461" />
  <package id="CKSource.FileSystem.Amazon" version="1.0.0" targetFramework="net461" />
  <package id="CKSource.FileSystem.Local" version="1.0.0" targetFramework="net461" />

您可以告诉 javascript 客户端在您的 CKFinderScripts/config.js 文件中使用自定义连接器路径:

config.connectorPath = '/__admin/connector';

您可以在 documentation 中找到更多配置选项。