【问题标题】:.NET - Dynamically Loading App Configurations Based on URL.NET - 基于 URL 动态加载应用程序配置
【发布时间】:2012-07-16 22:44:21
【问题描述】:

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

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

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

谁能推荐一个建议的方法或最佳实践来实现这种类型的应用程序?请注意,如果必须解析 URL 结构,我需要确保可以在开发、QA 和暂存环境中正确复制该结构。

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

【问题讨论】:

  • 只是想知道您是否考虑过为访问单个网站的数十家(或数百家)公司提供扩展选项?
  • 您好 oleksii - 是的,该站点托管在负载平衡平台上,该平台每天处理大约 120 万个基于 Web 服务的请求,每季度处理大约 20 亿个批处理事务(在数据库上)。使用此应用程序的单个企业客户可能会在繁忙的一天看到 1000 到 5000 个请求,而停机天数约为 10 个请求。如果我可以在一个负载平衡的 Web/应用服务器平台上进行 25、50 或 100 个部署,然后再进行代码的第二次部署,我会非常高兴(我主要是尝试解决运营部署/版本开销)。谢谢!

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


【解决方案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。如果公司改名怎么办?您可能想要一个用户友好但隐秘的技术 URL,例如 https://mysite.com/companyname/590。您可以显示用户友好名称,但在您的代码中忽略它,只使用公司 ID。然后,如果公司更改名称,没什么大不了的 - https://mysite.com/somethingElse/590

【讨论】:

  • 这很有帮助!我会试试这个并跟进结果如何。您是否建议更改 MVC 路由结构本身以适应公司名称/公司 ID?谢谢!
  • 看看stackoverflow是怎么做的:)stackoverflow.com/questions/11505451/…。 11505451 看起来像问题区域的 id,它会拉出客户友好的 net-dynamically-loading-app-configurations-based-on-url。由你决定先放哪个,先放 id 可能更容易。而且它确实可能对用户更友好,但小型企业可能无法获得它并希望首先获得他们的名字
  • 完美!我最终在我的 MVC 路由中添加了“companyid”和“companyname”参数,所以现在我有了mysite.com/companyname/companyid。如果没有提供公司 ID,我会根据名称进行查找,然后所有其他操作都使用该 ID。我最终为每个客户创建了一个文件夹结构,因此该站点有一个 Clients/CompanyID/ 文件夹。该文件夹包含特定于客户端的样式信息和图像资源,以及特定于客户端的 Web 服务参数的配置文件。像魅力一样工作,感谢您的帮助!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多