标签: appsettings

使用数据库保存应用程序设置

我正在寻找使我们的应用程序更具可扩展性和更易于操作的方法,而无需更改 web.config (或者,在我们的例子中,是包含 appsettings 节点的 application.config 文件)。

我考虑过的一种方法是将应用程序设置保留在具有 sqlcachedependency 的数据库表中。这意味着:

  • 每当数据库中的设置发生更改时,缓存就会失效,并再次检索设置,从而实时更新应用程序,而无需更改文件并重新启动整个应用程序。
  • 我们可以创建一个自定义工具来更改设置。

我认为的缺点是,这可能会导致严重的逻辑问题,因为如果您有一些东西可以在流程开始时检查应用程序设置,然后它在中途发生变化,您最终可能会无意中改变流程,如无需重新启动完整的应用程序。

有办法解决这个问题吗?

是否有更好的方法来管理应用程序设置,以便您可以一次性远程远程更改一台、几台或所有服务器的应用程序设置?

c# database asp.net web-config appsettings

5
推荐指数
1
解决办法
8173
查看次数

是否可以在 appConfig 的 appsettings 中创建特定部分

我有这个列表说产品类型:

Type1
Type2 
Type3
Run Code Online (Sandbox Code Playgroud)

等等 现在这个列表将不断增加,并将通过 appsettings 进行设置。

现在密钥不会真的像 Type1 或 Type2 这些将是不同的。喜欢说

<add key="FoodItems" value="something"/>
<add key="Cosmetics" value="xyz"/>
Run Code Online (Sandbox Code Playgroud)

等等..所以当我编写代码时,我需要从应用程序配置中获取键和值,我知道如何获取所有键,但我想将它们放在某个类别下,这样我就不必解析整个配置文件中,我将仅解析此部分并获取其下的所有类型。

就像是

<ItemList>
 <add key="FoodItems" value="something"/>
    <add key="Cosmetics" value="xyz"/>
</ItemList>
Run Code Online (Sandbox Code Playgroud)

是否可以在 appsettings 中做类似的事情?或者其他一些方式,但在 appconfig 中是的。

.net c# app-config appsettings

5
推荐指数
1
解决办法
5203
查看次数

更改 web.config 的 appSettings 中的值时在 IIS 中重新启动网站

为了安全起见,当我在 Web.config 中更改 appSettings 的值时,我总是重新启动网站,以便可以刷新所有更改。但我真的需要重新启动它吗?IIS 如何处理 appSetting 值,它是一次性读取这些值(一旦您启动应用程序)还是每次客户端访问网站时 IIS 都读取它?

iis web-config appsettings asp.net-mvc-4

5
推荐指数
1
解决办法
3861
查看次数

使用 AppSetting 设置常量变量

我怎样才能做到这一点:

private const string myConstant = ConfigurationManager.AppSettings["key"];
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:分配给“XXX”的表达式必须是常量。

我知道这个 AppSettings 可能永远不会改变,但我不想在我的控制器中硬编码值,如下所示:

private const string myConstant = "XXX";
Run Code Online (Sandbox Code Playgroud)

我想创建一个单身人士,但我不知道这是否真的是个好主意..有什么建议吗?

谢谢 :)

c# constants appsettings

5
推荐指数
0
解决办法
4580
查看次数

如何在 ASP.NET Core 中转换 AppSettings

我相信它appsettings.json及其环境对应物(开发、暂存、生产)取代了 Web.config 转换。

这在开发环境中工作正常,其中这些环境的变量存在于 launchSettings.json

但是,如果我使用发布功能,将发布配置为使用我创建的暂存构建配置,则不会出现转换。

我在其他地方读过你需要创建环境变量。真的!事情就是这样吗?我们现在有一个系统环境变量的舰队,这些应用程序可能会或可能不会(随着时间的推移)在该机器上的 IIS(或其他)Web 服务器上运行。

目前,我正在appsettings.json发布后手动复制和粘贴“暂存” 。我已经必须将预先准备好的 Web.config 文件复制并粘贴到该文件夹​​中,因为它不再可用于在 IDE 中进行配置(但奇怪的是,仍然会在发布操作期间生成)。

是否有另一种方法可以为部署进行可维护的转换,类似于旧配置文件的转换?

c# appsettings asp.net-core asp.net-core-2.1

5
推荐指数
2
解决办法
3428
查看次数

是否可以在 .NetCore 应用程序中仅发布某些 appsettings.json

我的 .NetCore 应用程序中有 4 个 appsettings.json:

  • appsettings.json
  • appsettings.Development.json
  • appsettings.Test.json
  • appsettings.Production.json

所有的 appsettings 都有不复制属性,但我注意到在发布应用程序时,所有的 appsettings 文件都被复制到发布文件夹。例如,即使我使用测试环境发布,appsettings.Production.json也会复制到发布文件夹。

它没有伤害,但我想知道在使用测试环境发布时是否可以只复制appsettings.jsonappsettings.Test.json

.net appsettings visual-studio .net-core asp.net-core

5
推荐指数
1
解决办法
4018
查看次数

有没有办法使用 F# 记录类型来提取 appsettings.json 配置?

长话短说appsettings.jsonConfiguration当我使用类似 C# 的类时,我可以提取到类型:

type Connection() =
    member val Host = Unchecked.defaultof<string> with get,set
    member val Port = Unchecked.defaultof<int> with get,set
    member val UserName = Unchecked.defaultof<string> with get,set
    member val Password = Unchecked.defaultof<string> with get,set

type Configuration() =
    member val RabbitMQ = Unchecked.defaultof<Connection> with get,set
    member val PostgreSQL = Unchecked.defaultof<Connection> with get,set

let fetchConfiguration =
        let builder = (new ConfigurationBuilder())
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json", true, true)
                          .AddEnvironmentVariables(); 
        let configurationRoot = builder.Build();
        let configuration = new Configuration()
        configurationRoot.Bind(configuration)
        configuration
Run Code Online (Sandbox Code Playgroud)

但是当使用 …

c# f# default-value appsettings

5
推荐指数
1
解决办法
1061
查看次数

Worker Service 在 System32 文件夹而不是本地文件夹中查找 appsettings.json

我有一个 .Net 核心工作服务,它作为 Windows 服务运行。该服务使用 appsettings.json 文件作为配置信息。使用SC CREATE命令安装服务后,服务失败。

在事件查看器中,我发现了错误,它找不到文件C:\Windows\System32\appsettings.json。我的服务文件放置在不同的文件夹中c:\Services\,而不是查看该位置,该服务正在查找 System32 文件夹中的文件。

配置注册如下。

 var configBuilder = new ConfigurationBuilder()
                   .SetBasePath(Directory.GetCurrentDirectory())
                   .AddJsonFile("appsettings.json");
var configuration = configBuilder.Build();
            services.AddSingleton(configuration);
Run Code Online (Sandbox Code Playgroud)

如何让服务查看本地文件夹?

windows-services worker-process appsettings .net-core asp.net-core

5
推荐指数
2
解决办法
2922
查看次数

在 .net core 3.1 应用程序中使用 AddEnvironmentVariables

我生成了一个新的网络项目。似乎在 .net core 3.1 中生成了 appSettings.jsons 并且工作正常。问题是它们是由运行时加载和控制的,而不是我。所以我不能调用AddEnvironmentVariables

AddEnvironmentVariables在这种情况下打电话的正确地点在哪里?

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
}

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
Run Code Online (Sandbox Code Playgroud)

appsettings .net-core-3.1

5
推荐指数
1
解决办法
8479
查看次数

如何在共享服务器上托管的 ASP.Net Core 3.1 应用程序中存储生产机密,如连接字符串

也许我的问题已经有了答案,但经过长时间的搜索,我还是找不到。

我的用例如下:我有一个 ASP.Net Core 3.1 Web 应用程序。它使用 MSSQL 数据库来存储一些信息(仅供参考,我不存储任何用户的秘密,但这些信息对我来说仍然很有价值)。它还使用电子邮件客户端发送电子邮件。我需要存储数据库的连接字符串以及电子邮件客户端的凭据。到目前为止,我将它们存储在 appsettings.json 文件中,直到我意识到它们是以纯文本形式存储的,如果有人访问它们,他/她将可以访问我的数据库和我的电子邮件客户端。

现在我正在寻找一种更安全地存储它们的方法。在阅读了 SO 中的问题后,我了解到存储此类信息的建议方法是使用 Azure Key Vault。我可以使用它并开始更新我的应用程序以使用它(我读到我可以在 Azure 之外访问它)。但我开始意识到我需要将 Vault URL、ClientID 和 ClientSecret 值存储在某处。

我该如何存储它们。在其中一个教程中,他们将它们放在 appsettings.json 文件中,但他们说这对于生产来说不是一个好方法,这是可以理解的。建议的选项是将它们存储在环境变量中。但是我的问题来了 - 我在共享服务器上托管,我无法添加任何环境变量。所以环境变量的使用对我来说不是一个选择。

就我而言,当我无法添加任何环境变量时,存储任何生产机密(如数据库连接字符串)的最佳方法是什么?Azure Key Vault 仍然是一个有效且不错的选择吗?我应该考虑将它们保留在 appsetting.json 中并加密该文件吗?或者也许有另一种更好的方法?

只有我在开发应用程序,而且我不会将它存储在任何公共 GitHub 存储库或任何东西中。

PS:这是我正在查看的教程的链接:Using Azure Key Vault From A Non-Azure App

谢谢。

编辑:这是一个教程,我发现它对如何在Azure 之外使用带有证书的 Azure Key Vault很有

c# appsettings azure azure-keyvault asp.net-core

5
推荐指数
1
解决办法
1406
查看次数