【问题标题】:c# edit and update a web.config file from ASPX pagec# 从 ASPX 页面编辑和更新 web.config 文件
【发布时间】:2011-09-13 11:55:18
【问题描述】:

我的 web.config 中有两个键,我需要将它们用于在 ASPX 页面中进行编辑。

<add key="atlasuser" value="username" />
<add key="atlaspass" value="password" />

我已经在我的 ASPX 页面后面的代码中编写了这个

Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
string u_user = txtUsername.Text;
string u_pass = txtPassword.Text;

string crmSID = Request.QueryString["SID"];

config.AppSettings.Settings["atlasuser"].Value = u_user;
config.AppSettings.Settings["atlaspass"].Value = u_pass;

config.Save(ConfigurationSaveMode.Full);

当我编辑字段并单击保存时,我收到一条解析错误消息,指出对 .tmp 文件的访问被拒绝,并且在源错误框中没有显示相关的源代码行。

我正在运行 Windows 7,并且我已检查 NETWORK SERVICE 对目录具有完全读写权限。

谁能帮帮我?

【问题讨论】:

  • 你的 IIS 用户有这些必要的权限吗?
  • 写入 web.config mint 会重置会话,所有用户都必须重新登录。从 Web 本身更改配置文件时应考虑这一点,因为如果配置错误,您可能会或可能不会卡在不可用的网站上
  • web.config 文件不是存储登录信息的好地方,请查看 Sessions,codeproject.com/KB/aspnet/ExploringSession.aspx
  • Session 是一个临时存储。这不是存储登录信息的正确位置。 Web.config 是存储登录信息的理想场所。但这不是您需要更改它的时候。 DB 或 XML 文件更适合这种情况。
  • 对不起,如果我不清楚,这意味着每个用户名都可以存储在会话中......是的,DB 或 XML 更适合数据

标签: c# asp.net iis web-config


【解决方案1】:

这篇 msdn 文章似乎认为您需要定义一个空字符串来打开默认配置项。

http://msdn.microsoft.com/en-us/library/ms151456.aspx

如果你这样做:

Configuration config = WebConfigurationManager.OpenWebConfiguration(null);

这应该允许您打开配置以读取/写入,但正如其他人所说,这不是存储此类信息的最佳位置

【讨论】:

    【解决方案2】:

    检查配置文件没有设置为只读?

    PS - 如果您在网络配置中存储临时信息,您的设计可能有问题。

    【讨论】:

      【解决方案3】:

      web.config 无法从 ASP.NET 应用程序中编辑。

      theory 中,.NET Framework 提供了用于编辑/保存应用程序配置文件(对于 ASP.NET 应用程序是 web.config)中的更改的 api,但实际上在 IIS 中这不起作用因为每次更改 web.config 都会重新启动 IIS 应用程序,因此 .NET 不允许您保存以防止这种情况发生。

      如果您确实需要允许从 ASPX 页面更改配置,您应该保存在数据库或其他外部 xml 文件中,然后在需要时读取这些设置。

      【讨论】:

      • 我很确定这是不正确的,至少在 .NET 4 中是这样。过去,我编写了从 aspx 页面编辑 web.config 的功能。
      • 是的,这在 2011 年写这个答案时可能是真的,但现在绝对不是真的。我偶然发现这篇文章的全部原因是因为我和 ASP.NET 项目正在修改自己的 web.config 文件,我正在谷歌搜索,看看它是否被认为是不好的做法。跨度>
      【解决方案4】:

      您可以编辑 web.config 文件本身。只需确保您运行应用程序的帐户具有适当的文件系统权限,以便能够写入应用程序目录:

      void editWebConfig(string key, string newValue, string filePath)
      {
          var xml = new XmlDocument();
          xml.Load(filePath);
          using(FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite))
          {
              xml.SelectSingleNode("//configuration/appSettings/add[@key = '" + key + "']").Attributes["value"].Value = newValue;
              xml.Save(fs);
          }
      }
      

      那你就打电话

      editWebConfig("atlasuser", txtUsername.Text, Server.MapPath(".") + "\\web.config");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 2014-03-07
        相关资源
        最近更新 更多