2015-10-15 4 views
1

Насколько я думаю, теперь лучше использовать файлы config.json для хранения настроек конфигурации для вашего приложения, что отлично. Love json format и найти его легче читать.vNext/.NET5 config.json в wwwroot

После публикации моего первого приложения vNext, хотя, я заметил, что файл config.json кажется опубликовать в

approot/src/my_project/config.json

и мой сайт в папку под названием wwwroot

Мой веб-сервер имеет несколько веб-сайтов, и каждый из них имел свой собственный файл «app.config», который я мог бы разместить в каталоге веб-сайта с настройками, характерными для этого веб-сайта. Но теперь у меня есть 2 проблемы,

  1. config.json населен в неправильном каталоге

  2. Если я сделать поместить файл config.json в папку Wwwroot, то она может быть доступна клиенту через браузер. Это очень опасно.

Нужно ли настраивать мой веб-сервер для игнорирования запросов для config.json, если это в wwwroot, или я что-то не хватает?

+1

Не размещайте config.json в wwwroot. В этом весь смысл иметь отдельную папку wwwroot. Легче держать его от обслуживания, если вы не поместите его в папку, которая будет обслуживаться. – mason

+0

Значит, он должен пойти в wwwroot? Как насчет того, чтобы пользователи могли видеть его, когда вы просматриваете его? – Gillardo

+0

Нет, он должен * не * быть в wwwroot. – mason

ответ

1

Благодаря масону для его ответа о структурировании веб-сайтов на вашем веб-сервере в отношении vNext, но есть и другой вариант, который стоит упомянуть здесь, поэтому я добавлю еще один ответ.

Как было указано выше, у меня есть файл config.json в моем проекте для разработки и получить файл я использовал это в моем Startup.cs файл

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

    Configuration = builder.Build(); 
} 

Это включает файл в approot при публикации. Включение этого в wwwroot тоже не является вариантом. Поэтому, используя файловую структуру, где у вас будет папка, содержащая как соответствующие, так и 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 по-прежнему помещается в соответствующую папку. Чтобы обойти это, вы должны это сделать в проекте.JSON-файл, как и

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

Теперь файл может быть в корне проекта, так что вы можете сохранить его слишком контроль источника, он работает при использовании IIS Express для разработки и не опубликовано ни.

Надеюсь, что это поможет кому-то еще

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.

+0

У меня есть connectionStrings и специальные настройки приложения в моем config.json, как и файл web.config. В вашей примерной структуре, где подходит? Также при разработке, где я могу сохранить файл config.json? Извините, но все примеры в Интернете имеют config.json в корне, поэтому просто пытайтесь обойти все это – Gillardo

+0

@ user2736022 Это где угодно. Логическое место выглядит как '/ root/Project1/approot /' Это зависит от вас. – mason

+0

Я не знал, что я просто что-то пропустил в отношении файловой структуры в vNext. еще раз спасибо – Gillardo

Смежные вопросы