我有一个ASP.NET 4.0 Web表单应用程序,需要在同一个Web中托管一个ASP.NET MVC应用程序(即在同一个IIS进程中 - 相同的会话,模块等)。
只要两者中的文件夹/文件都位于根文件夹中,这就非常容易。
如何干净地允许MVC文件全部包含在子文件夹中?
我有一个视图引擎,可以添加子文件夹的位置格式。这允许所有控制器/视图的工作正常,但我需要一个良好的内容文件解决方案。目前,我必须小心确保MVC应用程序中的所有路径都指向MVC子文件夹名称,如:
Url.Content("~/mvc/Content/Site.css")
实现这一目标有哪些可靠的选择?
我不希望任何来自或来自Web窗体的请求受到影响。此逻辑应仅处理可在MVC引擎内解析的URL(或操纵除 URL之外的所有URL ,只能通过Web窗体引擎解析)
编辑:客户要求两个站点共享相同的IIS会话,因此目前单独的应用程序不在桌面上。此时不想在IIS进程之间共享会话。
答案 0 :(得分:3)
我只想制作一组URL助手扩展程序,以便将此考虑在内。
扩展类
namespace Core.Extensions{
public static class UrlHelperExtensions
{
public static string Image(this UrlHelper helper, string fileName)
{
return helper.Content("~/mvc/Content/Images/" + fileName);
}
public static string Stylesheet(this UrlHelper helper, string fileName)
{
return helper.Content("~/mvc/Content/Css/" + fileName);
}
public static string Script(this UrlHelper helper, string fileName)
{
return helper.Content("~/mvc/Content/Scripts/" + fileName);
}
}
}
<强>的Web.Config 强>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Core.Extensions" /> <-- Add your extension namespace here
</namespaces>
</pages>
</system.web.webPages.razor>
视图中的用法
<link href="@Url.Stylesheet("site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Script("jquery-1.7.1.min.js")" type="text/javascript"></script>
<img src="@Url.Image("MyImageName.jpg")" />
<!--CSS in a sub directory from your root that you specified in your Extension class -->
<link href="@Url.Stylesheet("SomeDirectory/otherCss.css")" rel="stylesheet" type="text/css"/>
答案 1 :(得分:1)
一个可行的解决方案是为MVC应用程序创建一个子域,例如。 mvc.mydomain.com。它在易于集成的应用程序之间提供了明确的分离,并且不需要额外的域。