.NET - 基于URL动态加载应用程序配置

时间:2012-07-16 13:31:28

标签: c# .net asp.net-mvc

我正在使用MVC4在.NET中创建业务应用程序。该应用程序将由多个企业客户使用,每个客户都拥有自己的品牌元素(包括样式表和徽标图像)。 UI为后端平台调用Web服务,以便填充应用程序的各个区域;调用这些Web服务时必须提供特定于客户的参数。

我的目标是部署应用程序的单个实例,同时使应用程序根据URL本身的一部分动态加载适当的品牌方案和Web服务参数。该应用程序将是一个面向公众的消费者应用程序(由我的组织代表公司客户托管),因此URL必须易于记忆(因此不依赖于查询字符串参数进行访问),例如https://mysite.com/companyname

目的是为产品提供单一的代码库和功能集(使产品更容易支持,而不是为每个企业客户提供多个不同的部署),同时支持有限的品牌化程度。我可以通过一些手动操作设置(例如为每个客户创建一个新的app.config,web.config或虚拟目录)。

有人可以推荐实施此类应用的建议方法或最佳做法吗?请注意,如果必须解析URL结构,我需要确保可以在开发,QA和登台环境中正确复制结构。

我目前的方法要求将应用程序明确部署到不同的客户特定环境,并在web.config文件中将自定义品牌和Web服务参数称为“appsettings”键,这对每个客户都是不同的。这对于少量部署来说是可以的,但是随着功能升级/错误修复推送成为数十或数百个客户站点所必需的,这将变得难以处理。谢谢!

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是为大多数使用动态样式表。这里有一个很好的例子Dynamic CSS for ASP.NET MVC?和一个完整的源代码示例http://www.codeproject.com/Articles/171695/Dynamic-CSS-using-Razor-Engine

其余部分是细节。您需要从URL(或cookie)中解析公司标识符 - 对于在dev / qa中测试它非常有用。您需要从存储,数据库或配置文件中提取适合您的客户特定值。一个无关的想法。 https://mysite.com/companyname。如果公司更改名称怎么办?您可能需要一个用户友好的外观但秘密的技术网址,如https://mysite.com/companyname/590。您可以显示用户友好名称,但在代码中忽略它,只需使用公司ID。然后,如果公司更改名称,没有大问题 - https://mysite.com/somethingElse/590

答案 1 :(得分:0)

实现此目的的一种方法是创建一个目录结构,每个客户都有一个文件夹。然后在每个文件夹中都有自己的客户特定文件,例如css,模板,品牌等。 您还可以拥有一个共享/公共文件夹,该文件夹在应用程序开始时应用,并在所有客户之间共享。

您需要从URL中提取的唯一内容是客户端的名称(如果可能的话)。这将决定加载和应用哪个文件夹及其内容。