MVC5 Web App 中的应用程序设置 - 使用 C# 类与 Web.Config

本文关键字:Web 使用 Config 类与 应用程序 App MVC5 设置 | 更新日期: 2023-09-27 18:35:50

我正在构建我的应用程序,我已经在我的类文件的顶部硬编码了很多设置 - 比如ApiSidApiKeySmtpServiceUsernameMyEmailPassword等。 我现在正在尝试合并这些,我看到两个选项:

1)将它们全部推入web.config. 我不喜欢用数十(近 100)个设置混淆我的 web.config 的想法......我也对这里的安全感到不舒服。
2)构建一个只包含这些设置的静态类(Settings.cs) - 基本上包含一堆在整个应用程序中引用的常量。

我对第二种方法感觉更舒服,因为我可以完全隔离我的设置,而不必担心通过 web.config 公开它们 - 这种方法有什么固有的问题吗?

MVC5 Web App 中的应用程序设置 - 使用 C# 类与 Web.Config

这种方法有什么内在的错误吗?

  1. 是什么让你认为在代码中放置常量比在配置中更安全? 编译的DLL就在Web.Config旁边,如果有人可以检查其中一个,他们可以检查另一个。 硬编码值可以很容易地反编译。

  2. 配置文件的存在是有原因的。 具体来说,如果每个环境的任何值要更改,则它属于配置文件。 这样,可以在任何环境(开发、测试、生产等)中使用相同的相同代码库,您只需编辑该环境的配置值。 仅仅为了将相同版本部署到新环境而必须重新编译代码并不理想,因为它不再是相同的版本。

    我不喜欢用数十(近 100)个设置混淆我的 web.config 的想法

为什么不呢? 如果它们都是平面静态值,则appSettings键列表就可以了。 如果它们有更多的结构,请创建自定义配置部分。

这不一定是最好的方法,但我会将这些设置存储在数据库中。这为您提供了设置的数据库安全性,并且无需停止/重新启动应用程序即可轻松更新设置,从而避免踢出用户。

在数据库中具有设置后,可以定期(如每 15-20 分钟)加载它们以检测更改。同时,创建数据的字典,并将其包装在通过属性提供类型安全访问的类中,或者直接使用该字典。由于这是 Web 应用程序,因此您必须使用线程安全类(如 ConcurrentDictionary )来确保多个线程可以安全地访问您的设置。

如果你有这么多设置,web.config 就会变得混乱,每次更改都会强制应用池重新启动。正如@David在他的回答中提到的,配置文件为您提供了一种针对不同环境进行不同设置的简单方法,但这也很容易通过数据库方法实现,其中每个环境可能出现一次设置。