我有一个我为多个客户创建的应用程序。客户之间的唯一区别是stlye表和一些图形。我想让每个客户端只使用一个不同的URL,它将显示具有不同css的核心内容,如下所示:
所有MyApplication /客户端1 / myController的/ myaction
所有MyApplication /客户端2 / myController的/ myaction
有人可以给我一些关于如何在.NET MVC 4中完成的指示吗?
附加信息:
我只部署了这个应用程序的单个实例。我希望应用程序根据"客户端"动态使用正确的样式。我网址的一部分。
实施例。 client1具有绿色背景,client2具有蓝色背景。除了client1和client2正在运行相同的Web应用程序。
我的RouteConfig.cs文件中有以下内容:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "client1",
url: "client1/{controller}/{action}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "client2",
url: "client2/{controller}/{action}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
使用解决方案进行更新:
以下是我要找的答案:
routes.MapRoute(
name: "client",
url: "{client}/{controller}/{action}",
defaults: new { controller = "Home", action = "Index" },
constraints: new { client = "client1|client2" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:3)
注意:未经测试,只是一个想法。无法在评论中进行格式化
您可以使用客户端网址命名您的css文件,如:
<强> test.com.styles.css 强>
修改强>
我刚刚意识到我们无法访问BundleConfig.cs中的HttpContext,因为此时尚未创建Session。
因此,在您查看(_Layout.cshtml)
时,您将生成样式表名称,如下所示:
@{
var host = HttpContext.Current.Request.Url.AbsoluteUri;
// Will be http://www.test.com/AREA1
var area = host.Split('/')[3];
// SPLIT will give you AREA1
var styleSheet = string.Format("{0}.styles.css", area);
// This will give you Stylesheet Name:
// So then you can use simple HTML to load the css file
var styleSheetUrl = string.Format("{0}{1}", "/LocationOfCssFile/", styleSheet);
}
<link rel="stylesheet" href="@styleSheetUrl">
您可以从此处获取所需的正确URL部分: