【问题标题】:C#/.NET - config for server vs. localhost based on settings within web.configC#/.NET - 根据 web.config 中的设置配置服务器与本地主机
【发布时间】:2015-12-05 08:43:55
【问题描述】:

我有一个 C#/ASP.NET 项目,它在 web.configsystem.webServer 部分中使用了一些 handlersmodules 用于生产服务器上必须使用的单点登录内容,但是不需要(也不希望)在 localhost 上使用(我只是在 localhost 上看到空白屏幕而不是我的项目)。

简单的解决方案是拥有两个web.config 文件,但大多数设置是相同的,并且必须在两个web.config 文件中更新更改,所以我宁愿只有一个。一种解决方法是在 localhost 上开发时注释 web.config 中的相应行,并在部署时取消注释它们 - 但这并不是一个很好的解决方案。

与本地主机上不同的数据库存在类似问题。

有没有一种简单的方法可以让web.configweb.config 文件中执行类似if (!isLocalhost) use handler/module 的操作?我希望在preConditionmodulesfilter 设置的类似参数中找到一些东西,但没有找到合适的东西。

另一个想法可能是在app.settings 部分中添加一些内容-您可以有类似<add key="myTrigger" value="true" /> 的行,并通过测试System.Web.Configuration.WebConfigurationManager.AppSettings["myTrigger"] == "true" 在控制器中根据myTrigger 的设置执行操作-这可能是适合使控制器依赖于它是在服务器上还是在本地主机上运行,​​但是对于像 connectionStrings 这样的设置,这不会有太大帮助 - 除非有办法设置像 <whateversetting ... when appsetting.myTrigger == "true"> 这样的设置(但我怀疑这样的事情存在)。

另一个想法可能是使用外部配置文件,例如,<connectionStrings configSource="some.config" />,它只包含 web.config 的不同部分 - 所以一个本地 some.config 和一个在服务器上。

我希望有一个 all-in-one-web.config,但这似乎是不可能的 - 除非你有一个好主意。

那么:针对这种情况的最佳做法是什么?

【问题讨论】:

    标签: c# asp.net web-config


    【解决方案1】:

    我在拥有一个不在普通网站目录下的本地配置文件方面取得了很大的成功。所以部署你可以吹走网站目录,而不必记住保留一个文件。所以像:

    <connectionStrings configSource="..\ServerConfigs\ConnectionStrings.config"/>
    

    我还将我的所有应用程序设置(您所在的环境除外)移动到数据库中。请参阅我的博文here 有两个主要好处。首先,您可以将生产数据库移至开发环境,无需更改任何内容,因为所有环境的所有值都在 1 个表中。第二个好处是很容易放入一个隐藏的网页,您可以访问并查看网站的所有设置。

    【讨论】:

    • +1 用于将 local.config 保留在网站目录之外,这对于连接字符串很好;将设置移动到数据库似乎有点奇怪,我的主要区别在于来自单点登录软件的模块/处理程序 - 当它们在 web.config 中时,我不必关心这些东西,但是当它们在数据库中时,我必须关心;对于其他设置,这可能是一个好方法 - 拥有一个(隐藏的)网页来查看设置对我来说听起来像是一个安全风险(我不会设置这样的页面)
    • @outofmind “隐藏”页面的 URL 类似于“mysite.com/admin/gttg”,您必须以管理员身份登录,所以它不像听起来那么危险。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多