在 IIS 上托管的 ASP.NET Core WebApp 上提供持久配置

Posted

技术标签:

【中文标题】在 IIS 上托管的 ASP.NET Core WebApp 上提供持久配置【英文标题】:Provide persistent configuration on ASP.NET Core WebApp Hosted on IIS 【发布时间】:2022-01-04 07:43:21 【问题描述】:

我想使用非常简单的 WebDeploy 功能通过 *** 为客户端发布 webapp。

IIS 位于客户端服务器上,由受信任方管理。我想将我的配置参数放在所述服务器上,而不必在我的代码中写入敏感数据(以及源代码控制)。

        public void ConfigureServices(IServiceCollection services)
        
            EGICContext.ConnectionString = Configuration["ConnectionString"];
            EGICContext.InMemory = Configuration["InMemory"] == "true";
            services.AddScoped((s) => new EmailSender(Configuration["EmailSMTP"]));        
        

我在客户端服务器上创建了一个文件夹,并想像在 Azure 中那样编辑生产配置。但这会修改​​ web.config 文件,每次发布都会覆盖...

这是不可接受的行为,因为应用程序在没有配置的情况下就崩溃了。 我觉得这应该可以在几分钟内解决,但我花了几个小时寻找解决方案,但没有任何结果。

我不能使用 appsettings.json,它也会被覆盖,我不能将任意 secrets.json 放在根文件夹中,因为应用程序不会读取它。 环境变量会相互冲突,看起来很乱……

我错过了什么?

【问题讨论】:

【参考方案1】:

睡眠确实很神奇, 对于任何有兴趣的人,我编辑了我的 Program.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            
                webBuilder.UseStartup<Startup>();
            )
            .ConfigureAppConfiguration((context, args) =>
                        args.SetBasePath(context.HostingEnvironment.ContentRootPath)
                            .AddJsonFile($"secrets.json", optional: true, reloadOnChange: true));

提供一个不受发布影响的附加文件,并将所有配置存储在这里。 这不会与 ConfigureWebHostDefaults 之前的配置混淆。

我不确定这是否存在安全风险,但它符合我的预期。

【讨论】:

以上是关于在 IIS 上托管的 ASP.NET Core WebApp 上提供持久配置的主要内容,如果未能解决你的问题,请参考以下文章

如何将非 www 域重定向到 Azure 上托管的 asp.net mvc 中的 WWW 域?

Asp.net core 2.1 Web App 无法在 IIS 上正确呈现

WCF REST - 在 IIS 6 上托管的问题

IIS 上托管的 WCF 服务和 IIS 上的客户端网站

访问本地 IIS 上托管的 WCF 服务时出错:“相对 URI 不支持此操作。”

asp.net:如何使用 ssl 证书