Umbraco 根站点和子目录中的 ASP.NET MVC 应用程序
Umbraco root site and ASP.NET MVC application in subdirectory
我正在尝试在 Umbraco 站点的子目录中设置 ASP.NET MVC 应用程序。这个新的 ASP.NET MVC 应用程序将 运行 作为虚拟应用程序。
例如,Umbraco 站点位于 www.domain.com,另一个 MVC 应用程序位于 www.domain.com/app.
我试过这种方法:Umbraco Child MVC Application (Virtual Directory) - Could not load file or assembly Umbraco.ModelsBuilder
有效,但存在一些问题。
- 放置在 /media 部分的所有图像将不再呈现。
- /umbraco 路由失败,因此我们无法访问 CMS。
没有任何错误消息,只是 'The page cannot be displayed because an internal server error has occurred' 当我尝试转到 '/umbraco' 路线时。
能否请您告诉我哪里出了问题,或者如何在 Umbraco 的子目录中创建应用程序作为虚拟应用程序?
Umbraco 版本为 7.7.1。
还有一点要注意——Umbraco 托管在 Azure 上。
谢谢!
问题是 web.config 设置是继承的。因此,如果您的 Umbraco 安装在目录 /wwwroot 中并且您的虚拟应用程序在 /wwwroot/app 中,那么 Umbraco 安装的 web.config 设置将被继承。它可能会导致重大问题。
您会看到一些将 Umbraco 的 <system.web>
和 <system.webServer>
部分包装在 <location>
标记中的建议。正如您所提到的,问题在于这样做会阻止某些 Umbraco 子文件夹的继承,这会破坏 /media 和 /umbraco CMS 门户等内容。
因此,您需要覆盖 /app 的 web.config 文件中有问题的 web.config 设置。这是对我有用的:
- 在
<appSettings>
标签之间,添加 <remove key="owin:appStartup" />
。
- 在您的
<system.web><membership><providers>
部分中,务必添加 <clear />
作为您的第一个 child。这样做会删除继承的 Umbraco.Web.Security.Providers.MembersMembershipProvider。因为如果 ASP.NET 找不到 class,它会向您显示异常。
- 同样,出于同样的原因,在您的
<system.web><roleManager><providers>
部分中添加一个 <clear />
作为您的第一个元素。
- 在你的
<system.web><compilation><assemblies>
中添加一个 <remove assembly="Umbraco.ModelsBuilder"/>
。否则,您的应用程序会在找不到该程序集时出现故障。
- 在 中,添加
<remove name="UmbracoModule" /><remove name="ClientDependencyModule" /><remove name="ImageProcessorModule" />
应该可以了。但要点是找到在你的 Umbraco web.config 文件中加载的 Umbraco-specific 的 Umbraco 程序集,然后在你的虚拟应用程序的 web.config 中删除它们以防止继承和由此产生的 "assembly not found" 错误。
我正在尝试在 Umbraco 站点的子目录中设置 ASP.NET MVC 应用程序。这个新的 ASP.NET MVC 应用程序将 运行 作为虚拟应用程序。 例如,Umbraco 站点位于 www.domain.com,另一个 MVC 应用程序位于 www.domain.com/app.
我试过这种方法:Umbraco Child MVC Application (Virtual Directory) - Could not load file or assembly Umbraco.ModelsBuilder
有效,但存在一些问题。
- 放置在 /media 部分的所有图像将不再呈现。
- /umbraco 路由失败,因此我们无法访问 CMS。
没有任何错误消息,只是 'The page cannot be displayed because an internal server error has occurred' 当我尝试转到 '/umbraco' 路线时。
能否请您告诉我哪里出了问题,或者如何在 Umbraco 的子目录中创建应用程序作为虚拟应用程序?
Umbraco 版本为 7.7.1。
还有一点要注意——Umbraco 托管在 Azure 上。
谢谢!
问题是 web.config 设置是继承的。因此,如果您的 Umbraco 安装在目录 /wwwroot 中并且您的虚拟应用程序在 /wwwroot/app 中,那么 Umbraco 安装的 web.config 设置将被继承。它可能会导致重大问题。
您会看到一些将 Umbraco 的 <system.web>
和 <system.webServer>
部分包装在 <location>
标记中的建议。正如您所提到的,问题在于这样做会阻止某些 Umbraco 子文件夹的继承,这会破坏 /media 和 /umbraco CMS 门户等内容。
因此,您需要覆盖 /app 的 web.config 文件中有问题的 web.config 设置。这是对我有用的:
- 在
<appSettings>
标签之间,添加<remove key="owin:appStartup" />
。 - 在您的
<system.web><membership><providers>
部分中,务必添加<clear />
作为您的第一个 child。这样做会删除继承的 Umbraco.Web.Security.Providers.MembersMembershipProvider。因为如果 ASP.NET 找不到 class,它会向您显示异常。 - 同样,出于同样的原因,在您的
<system.web><roleManager><providers>
部分中添加一个<clear />
作为您的第一个元素。 - 在你的
<system.web><compilation><assemblies>
中添加一个<remove assembly="Umbraco.ModelsBuilder"/>
。否则,您的应用程序会在找不到该程序集时出现故障。 - 在 中,添加
<remove name="UmbracoModule" /><remove name="ClientDependencyModule" /><remove name="ImageProcessorModule" />
应该可以了。但要点是找到在你的 Umbraco web.config 文件中加载的 Umbraco-specific 的 Umbraco 程序集,然后在你的虚拟应用程序的 web.config 中删除它们以防止继承和由此产生的 "assembly not found" 错误。