ASP.Net核心web应用上.config文件和Azure设置之间的混淆
我已经构建了一个项目(为SPA web应用程序提供API),作为一个Asp.Net核心web应用程序(.Net framework),带有WebApi选项(VS 2017社区)。这创建了一个包含app.config文件而没有web.config文件的项目。我在app.config中有一个部分,我在Startup.cs类中使用ASP.Net核心web应用上.config文件和Azure设置之间的混淆,azure,asp.net-web-api,Azure,Asp.net Web Api,我已经构建了一个项目(为SPA web应用程序提供API),作为一个Asp.Net核心web应用程序(.Net framework),带有WebApi选项(VS 2017社区)。这创建了一个包含app.config文件而没有web.config文件的项目。我在app.config中有一个部分,我在Startup.cs类中使用System.Configuration.ConnectionManager.ConnectionStrings['MainDb']阅读该部分,该部分在本地运行良好 当我将应
System.Configuration.ConnectionManager.ConnectionStrings['MainDb']
阅读该部分,该部分在本地运行良好
当我将应用程序部署到Azure并在门户中设置“MainDb”连接字符串时,web应用程序不会读取它。我已经直接通过门户网站和VS2017中Azure server explorer提供的设置窗格设置了这些设置。在服务器资源管理器中,我可以看到web.config文件,但没有app.config文件,web.config文件没有connectionstring节点,但web应用程序似乎看到了我部署时app.config中的连接字符串
对于app.config和web.config之间的交互,我有些困惑-我需要在哪里声明我的连接字符串,以便它可以被Azure门户设置覆盖?通常在ASP.NET核心中,我们使用
appsettings.json
文件进行配置。尽管还有许多其他选项(XML、用户机密等):
因此,您将有一个如下的appsettings.json文件:
{
"ConnectionStrings": {
"MainDb": "Data Source=.;Initial Catalog=MainDb;Integrated Security=True"
}
}
然后,您可以通过访问启动
中的i配置
对象来读取它:
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
}
public IConfiguration Configuration { get; set; }
public void ConfigureServices(IServiceCollection services)
{
string connStr = Configuration.GetConnectionString("MainDb);
}
}
GetConnectionString(“name”)
实际上是Configuration.GetSection(“connectionString”)[“name”]
的缩写。我以为模板会创建一个appsettings.json文件呢?是的,的确如此。看起来这个项目是作为一个“空”项目启动的,而不是一个web应用程序和添加到其中的东西。连接字符串应该进入appsettings吗?是的,应该。您可以查看我写的这篇文章以获得更多指导:。您应该将其添加到ConnectionString部分,并使用核心配置API(而不是您使用的API)读取它;app.config不再使用。按照junnas文章中的建议再次阅读它们,效果很好,而且它们在Azure中也像预期的那样被收集起来。太好了:)我会给出一个答案。