据我所知,现在首选使用config.json文件存储应用程序的配置设置,这很棒。喜欢json格式,并且更容易阅读。
在发布我的第一个vNext应用程序后,我注意到config.json文件似乎发布到
approot/src/my_project/config.json
我的网站位于名为wwwroot
我的网络服务器有多个网站设置,每个网站都有自己的“app.config”文件,我可以将其放入网站目录中,并运行特定于该网站的设置。但现在我有两个问题,
config.json填充到错误的目录
如果我确实将config.json文件放入wwwroot文件夹,那么客户端可以通过浏览器访问它。这非常危险。
我是否必须设置我的网络服务器以忽略对config.json的请求,如果它在wwwroot中,或者我完全错过了什么?
答案 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进行开发时也可以使用,并且它也不会发布。
希望这有助于其他人