0

我正在尝试将 iFrame 嵌入到 Orchard CMS 部分(相同的域 - 控件位于主 Orchard 安装的子目录中)。我在这里找到了两个讨论我遇到的问题的线程(请参阅此处此处),但我仍然遇到问题。我试图在 iFrame 中加载的页面是标准 WebForms,并且需要 WebResource.axd 和 ScriptResource.axd。我设法让 WebResource.axd 正常工作,但 ScriptResource 返回 500 Internal Server Error(根据 Chrome),但我无法弄清楚导致 500 的原因或真正的错误是什么。我的 web.config 中的相关条目如下 - 有什么建议吗?

<handlers accessPolicy="Script">
  <!-- clear all handlers, prevents executing code file extensions, prevents returning any file contents -->
  <clear />

  <!-- Custom Controls -->
  <add name="ASPX" path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" requireAccess="Script"/>
  <add name="WebResource" path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode" />
  <add name="ScriptResource" path="ScriptResource.axd" verb="GET" type="System.Web.Handlers.ScriptResourceHandler" preCondition="integratedMode" />

  <!-- Everything below added from Orchard -->
  <!-- Return 404 for all requests via managed handler. The url routing handler will substitute the mvc request handler when routes match. -->
  <!--<add name="NotFound" path="*" verb="*" type="System.Web.HttpNotFoundHandler" preCondition="integratedMode" requireAccess="Script" />-->

  <!-- WebApi -->
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
4

1 回答 1

0

结合 Bertrand 的建议和大量的尝试,我最终找到了解决方案。

首先,自定义内容需要位于子文件夹中,并且在 IIS 中,您可以将该子文件夹切换到应用程序(而不是虚拟目录)。为了让您更加安心,我还给了它一个专用的应用程序池,所以如果它确实有什么奇怪的地方,主站点就不会关闭。

接下来的部分涉及几个步骤 - 主要是因为 system.webServer/handlers 中的 <clear /> 条目。在父应用程序中删除它会破坏 Orchard,但将它放入会破坏我的子应用程序,因为它继承了父应用程序的所有设置。为了解决这个问题,我的子应用程序必须具有以下 system.webServer 配置:

    <system.webServer>
  <handlers>
    <remove name="NotFound" />
    <add name="ASPX" path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" requireAccess="Script"/>
  <add name="WebResource" path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode" />
  <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </handlers>
  <modules>
    <remove name="WarmupHttpModule" />
  </modules>
</system.webServer>

我使用此处引用的 SO 链接来查找所需的“真实”ScriptResource.axd 引用,看起来一切正常。

于 2012-11-30T02:49:50.520 回答