gpt4 book ai didi

asp.net-mvc - 通过 ASP.NET MVC Controller 更新 AppSettings

转载 作者:行者123 更新时间:2023-12-03 02:11:21 25 4
gpt4 key购买 nike

我正在编写一个基本的小型论坛网络应用程序(为了好玩并磨砺旧锯子),但我在 AppSettings 方面遇到了一些麻烦。

我的计划是将这些设置放在自己的文件(Settings.config)中,我将向该文件授予 Web 进程用户帐户的修改权限,并将所有可编辑的设置存储在此文件中(例如论坛标题、描述等) )。

这是我的代码:

[AcceptVerbs(HttpVerbs.Post)]public ActionResult Edit(FormCollection collection){    try    {        var config = WebConfigurationManager.OpenWebConfiguration("~/Web.config");        config.AppSettings.Settings["SiteTitle"].Value = collection["SiteTitle"];        config.AppSettings.Settings["SiteDescription"].Value = collection["SiteDescription"];        config.Save(ConfigurationSaveMode.Minimal, false);        ConfigurationManager.RefreshSection("appSettings");        return RedirectToAction("Index");    }    catch (Exception ex)    {        ModelState.AddModelError("_FORM", ex.Message);        return View("Index");    }}

...但运行它会返回以下错误:

无法为请求的配置对象创建配置文件。

我尝试向所有用户授予对设置文件的完全权限,但没有效果(我目前只是在 Cassini 下运行,因此进程用户是我,无论如何都拥有该文件的所有权)。

有什么想法吗?

最佳答案

将第一行更改为:

var config = WebConfigurationManager.OpenWebConfiguration("~");

尽管可能令人困惑,OpenWebConfiguration 需要 Web.config 所在的虚拟路径,不包括文件名。我猜逻辑是任何给定目录中都只有一个 Web.config,因此不需要包含名称。

MSDN documentation最终在这里给我们提供了线索 - 如果您查看示例,它们都使用显式相对路径,并且在 IIS 下托管时允许您从其他位置指定配置文件,例如:

OpenWebConfiguration("/siteName", "Default Web Site", null, "myServer");

附录:

那么为什么OpenWebConfiguration("~/Web.config")能起作用呢?我不确定我能否明确解释它,但尝试一下:将其更改为 ("~/Foo.bar")。结果一样!您可以读取 - 相同的 Web.config 文件 - 但无法写入! (现在尝试将 foo.bar 目录添加到您的站点,然后在其中放入 Web.config...)

由于 OpenWebConfiguration 需要一个目录(并且显然允许不存在的目录,只要它在父级中找到 Web.config),我认为这就是为什么错误地将 ~/Web.config 指定为“路径”允许我们加载根配置,但不保存它。

关于asp.net-mvc - 通过 ASP.NET MVC Controller 更新 AppSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1745498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com