Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.Net核心web应用上.config文件和Azure设置之间的混淆_Azure_Asp.net Web Api - Fatal编程技术网

ASP.Net核心web应用上.config文件和Azure设置之间的混淆

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']阅读该部分,该部分在本地运行良好 当我将应

我已经构建了一个项目(为SPA web应用程序提供API),作为一个Asp.Net核心web应用程序(.Net framework),带有WebApi选项(VS 2017社区)。这创建了一个包含app.config文件而没有web.config文件的项目。我在app.config中有一个部分,我在Startup.cs类中使用
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中也像预期的那样被收集起来。太好了:)我会给出一个答案。