wwwroot中的vNext / .NET5 config.json

时间:2015-10-15 14:49:21

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

据我所知,现在首选使用config.json文件存储应用程序的配置设置,这很棒。喜欢json格式,并且更容易阅读。

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

approot/src/my_project/config.json

我的网站位于名为wwwroot

的文件夹中

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

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

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

  3. 我是否必须设置我的网络服务器以忽略对config.json的请求,如果它在wwwroot中,或者我完全错过了什么?

2 个答案:

答案 0 :(得分:2)

每个项目都应该有一个单独的文件夹。永远不要在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

答案 1 :(得分:1)

感谢mason关于在网络服务器上构建关于vNext的网站的答案,但是还有另外一个值得一提的选项,这就是为什么我要添加另一个答案。

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

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

    Configuration = builder.Build();
}

这包括发布时的批准文件。将其包含在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进行开发时也可以使用,并且它也不会发布。

希望这有助于其他人