asp.net MVC中特定于部署的资源

本文关键字:部署 资源 于部署 MVC net asp | 更新日期: 2023-09-27 18:22:39

我创建了一个简单的电子商务web应用程序。当我制作这个应用程序时,我认为它会被部署为一个单独的网站,所以.cshtml文件看起来像这样:

<head>
    <title>My Company Storefront</title>
    <meta name="description" content="Welcome to My Company online store" />
    ....
</head>

现在,该web应用程序将被部署为第二个网站。部分内容需要更改:

<head>
    <title>Second Company Storefront</title>
    <meta name="description" content="Welcome to Second Company online store" />
    ....
</head>

这两个部署将共享相同的代码,但.cshtml文件中的某些文本内容将有所不同。

实现这一点的好方法是什么?

我看过.resx系统,但它似乎有点重。每个部署都只有一个资源文件。此外,我希望外部程序员/管理员对资源进行更改。

.resx合适吗?

asp.net MVC中特定于部署的资源

有几种方法可以实现这一点。您已经探索了resx选项(会起作用)。这些内容也可以从某种数据库中提取。既然你使用的是asp.net,为什么不看看Web.config和transforms选项呢。

在您的基线Web.config中:

<appSettings>
    <add key="Description" value="Welcome to My Company online store"/>
</appSettings>

如果您有SecondCompany的项目配置(以及通常的调试和发布),那么您可以将Web.SecondCompany.config作为:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="Description" value="Welcome to Second Company online store"
         xdt:Locator="Match(key)" xdt:Transform="SetAttributes"/>
  </appSettings>
</configuration>

部署后,您可以将Web.config配置为基于部署的配置进行转换。SecondCompany配置的部署将导致:

<appSettings>
    <add key="Description" value="Welcome to Second Company online store"/>
</appSettings>

由于Web.config是一个简单的XML文件,因此可以在不部署的情况下直接修改。

在您看来,您可以将内容部分替换为:

<head>
    <title>My Company Storefront</title>
    <meta name="description" 
          content="@System.Configuration.ConfigurationManager.AppSettings["Description"]" />
    ....
</head>

有关Web.config转换的详细信息,请单击此处。

听起来你可能比在后端有一个数据库更糟糕(如果这是一个在线商店,你可能已经有了这个数据库),你可以在其中保存一个翻译表,然后可以根据每个网站进行修改。

_id     _expression    _translation
-----------------------------------
1       msgtitle        Welcome to My Company online store

当然可以在第二个网站上修改。

要使用翻译,请在应用程序初始化期间将它们加载到某种字典中,并使用表达式作为关键字,使用翻译作为值:

<head>
    <title>Second Company Storefront</title>
    <meta name="description" content="@MyCache.Translate["msgtitle"]" />
</head>