【问题标题】:vNext / .NET5 config.json in wwwrootwwwroot 中的 vNext / .NET5 config.json
【发布时间】:2015-10-15 14:49:20
【问题描述】:

就我的想法而言,现在最好使用 config.json 文件来存储应用程序的配置设置,这很棒。喜欢 json 格式,觉得更容易阅读。

不过,在发布我的第一个 vNext 应用程序时,我注意到 config.json 文件似乎发布到了

approot/src/my_project/config.json

我的网站位于一个名为wwwroot的文件夹中

我的网络服务器设置了多个网站,每个网站都有自己的“app.config”文件,我可以将其放入网站目录中,其中包含特定于正在运行的网站的设置。但是现在我有两个问题,

  1. config.json 填充到错误的目录

  2. 如果我确实将 config.json 文件放入 wwwroot 文件夹,则客户端可以通过浏览器访问它。这是非常危险的。

我是否必须设置我的网络服务器以忽略对 config.json 的请求(如果它在 wwwroot 中),还是我完全遗漏了什么?

【问题讨论】:

  • 不要将 config.json 放在 wwwroot 中。这就是拥有一个单独的 wwwroot 文件夹的全部意义所在。如果您不将其放入送达的文件夹中,则更容易防止送达。
  • 那么它应该进入 wwwroot 吗?但是,当您浏览它时用户能够看到它呢?
  • 不,它应该在 wwwroot 中。
  • 那么如何像以前的 MVC 版本一样为每个站点进行配置?如果它不在根目录中,因为它被发布到 approot,并且它不在 wwwroot 中,用于在每个单独的站点上使用,它可以去哪里?

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


【解决方案1】:

每个项目都应该有一个单独的文件夹。并且永远不要在 wwwroot 中放置您不希望提供的文件夹。它最终可能看起来像这样:

/root
/root/Project1
/root/Project1/config.json
/root/Project1/wwwroot
/root/Project2
/root/Project2/config.json
/root/Project2/wwwwroot

显然,您的结构不必完全匹配。不过,一般来说,如果您使用单独的目录来分隔您的项目,并且不要将您的配置放在您的 wwwroot 中,那么您会没事的。

顺便说一句,您可能希望首先避免在 config.json 文件中包含任何秘密。您应该使用源代码控制软件,并且应该避免出现秘密内容被签入的情况。也许是环境变量或secrets API

【讨论】:

  • 我的 config.json 中有 connectionStrings 和特定于应用程序的设置,就像以前的 web.config 文件一样。在您的示例结构中,approot 在哪里?另外在开发时我可以在哪里存储 config.json 文件?抱歉,网络上的所有示例都在根目录下有 config.json,所以只是想了解这一切
  • @user2736022 随心所欲。一个合乎逻辑的地方看起来像/root/Project1/approot/ 这取决于你。
  • 我不知道我是否只是遗漏了有关 vNext 中文件结构的内容。再次感谢
【解决方案2】:

感谢 mason 就 vNext 在您的网络服务器上构建网站的回答,但这里还有另一个值得一提的选项,这就是我添加另一个答案的原因。

如上所述,我的项目中有 config.json 文件用于开发,并获取我在 Startup.cs 文件中使用的文件

public Startup(IApplicationEnvironment appEnv)
{
    var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath.)
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

这包括发布时 approot 中的文件。将其包含在 wwwroot 中也不是一种选择。因此,使用文件结构,您将拥有一个包含 approot 和 wwwroot 文件夹的文件夹,我将代码更改为此,它适用于开发和发布。

public Startup(IHostingEnvironment env)
{
    // configuration is in the folder above the wwwroot
    var builder = new ConfigurationBuilder(env.MapPath("..\\"))
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

但是,当您发布代码/站点时,config.json 文件仍然放在 approot 文件夹中。为了解决这个问题,您必须将其添加到 project.json 文件中,就像这样

"publishExclude": [
    "node_modules",
    "bower_components",
    "config.json",
    "**.xproj",
    "**.user",
    "**.vspscc"
],
"exclude": [
    "wwwroot",
    "config.json",
    "node_modules",
    "bower_components"
]

现在该文件可以在项目根目录中,因此您可以将其保存在源代码管理中,它在使用 IIS Express 进行开发时可以使用,并且也未发布。

希望这对其他人有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2015-03-07
    相关资源
    最近更新 更多