【问题标题】:How can I add location elements programmatically to the web config?如何以编程方式将位置元素添加到 Web 配置?
【发布时间】:2011-10-10 15:00:36
【问题描述】:

我有一个从数据库创建页面路由的应用程序。我的整个网站都使用表单身份验证进行保护,但我需要允许未经身份验证的用户访问这些路由。我不想为 web.config 中的路由硬编码 <location> 标签,因为这将使我无法使用数据库生成路由。

谁能帮忙?

【问题讨论】:

  • 如果您从数据库加载它们,为什么要将它们存储到 web.config 中?
  • 您好犬夜叉,我不想存储它们,我想允许用户访问。我的整个网站都通过表单身份验证进行保护,但我创建的路由需要由未经身份验证的用户访问。
  • 您是否有理由不能以特定路径启动所有这些 url/路由,然后为该路径设置位置标记?例如,让它们都以 /public/ 开头,然后在 web.config 中使用位置标记来授予对公共路径的未经身份验证的访问权限。
  • 您好 Patmortech。那将是我的后备计划。我想要实现的是一个非常简单的 URL,因为它旨在由用户输入。

标签: asp.net .net c#-4.0 web-config forms-authentication


【解决方案1】:

谢谢大家。我找到了an answer here

基本上,它涉及为每个路由创建一个文件夹并将 web.config 文件放入其中以允许访问。这种方法需要与将 RouteExistingFiles 设置为 false 相结合,这样路由就不会与文件夹混淆。

【讨论】:

    【解决方案2】:

    与其使用强类型配置类,不如直接在 XML 中进行修改?

    这里有一个缩写的 sn-p 来演示我的一些代码的概念,即在 machine.config 中进行性能 IIS 调整。不过,其他 XML 配置文件的主体是相同的。您只需要创建适当的 XPath 语句来执行您需要的操作。

    XmlDocument machineConfigFile = new XmlDocument();
    machineConfigFile.Load(MachineConfigPathString);
    
    XmlNode autoConfig = machineConfigFile.SelectSingleNode(@"/configuration/system.web/processModel/@autoConfig");
    autoConfig.Value = "false";
    
    machineConfigFile.Save(MachineConfigPathString);
    

    保存后,XmlDocument 对象将保留所有其他未触及的文档节点。非常便利。它非常适合修改 machine.config。我能看到的唯一可能的问题是,当您将更改保存到 web.config 时,您的应用程序可能会重置。因此,请在安全的环境中使用您的 web.config 备份进行测试,以防万一重置导致任何不希望的结果!

    【讨论】:

    • 谢谢,本。我已经尝试过了,但我发现它时常使 VS10 崩溃,而且当它重新编写 web.config 时,它会转义某些字符,这会导致问题。
    【解决方案3】:

    我为你找到了this MSDN link。不过我没有找到你是否可以通过这种方式修改运行服务器实例的配置。

    【讨论】:

    • 谢谢,Zruty。我看过了,但虽然它允许我更改 web.config,但它似乎不允许我更改位置元素。它们似乎位于没有 .Add 方法的集合 (ConfigurationLocationCollection) 中。
    【解决方案4】:

    您是否考虑过以不同的方式实现您的网站安全性?网站的一部分允许未经身份验证的访问,而另一部分则不允许。我“假设”(不好)您正在使用 MVC,因为您正在描述路由 - 这对于 MVC 和传统的 Web 表单应用程序都很容易做到。

    【讨论】:

    • 谢谢 Jim,我没有使用 MVC,但我使用的是 .NET 4.0。当您说“网站的一部分”时,我不确定这与路线有何关系。在这种情况下,我创建的所有路由都指向同一个页面。该页面接受未经身份验证的用户,但路由不接受。据我了解,我需要允许未经身份验证的用户访问该页面及其工作路线。还有其他方法吗?
    • 我不知道使用您正在采用的方法。
    猜你喜欢
    • 2013-10-30
    • 2012-05-10
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2015-04-19
    • 2014-06-27
    相关资源
    最近更新 更多