如何以编程方式读取asp.net mvc中的自定义配置文件

时间:2014-07-17 20:56:10

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

在我的ASP.NET MVC 5的根文件夹中,我有两个配置文件。一个是默认的web.config文件,第二个是department.config

department.config文件的内容是:

<department>    
    <add key="dept1" value="xyz.uvw.rst" />   
    <add key="dept2" value="abc.def.ghi" />
<department>

如何阅读department.config文件?

我想在此配置文件中获取<department>下的值集合。

编辑:Web.config有<department configSource="reports.config" /> 那么,如何在asp.net mvc中读取configSource文件?

编辑:

<configuration>
  <configSections>
    <section name="departments" 
             type="System.Configuration.AppSettingsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
             restartOnExternalChanges="false" 
             requirePermission="false" />

4 个答案:

答案 0 :(得分:3)

为什么不在web.config中使用appSettings部分?这些使用ConfigurationManager对象很容易阅读。

在您的web.config中,找到appSettings部分:

<appSettings>
<add key="dept1" value="xyz.uvw.rst"/>

然后在您要阅读它的类中,导入正确的命名空间:

using System.Configuration;

然后轻松读取数值,如下:

var dept1 = ConfigurationManager.AppSettings.Get("dept1");

如果你必须在单独的配置中使用它,你可以考虑为它创建一个类,我将很快发布一个例子。

edit1:这是一个如何进行自定义配置的快速示例

首先,定义配置类:

using System;
using System.Configuration;

namespace WebApplication2
{
    public class MyConfig : ConfigurationSection
    {
        private static readonly MyConfig ConfigSection = ConfigurationManager.GetSection("MyConfig") as MyConfig;

        public static MyConfig Settings
        {
            get
            {
                return ConfigSection;
            }
        }


        [ConfigurationProperty("Dept1", IsRequired = true)]
        public string Dept1
        {
            get
            {
                return (string)this["Dept1"];
            }

            set
            {
                this["Dept1"] = value;
            }
        }

        [ConfigurationProperty("Dept2", IsRequired = true, DefaultValue = "abc.def.ghi")]
        public string Dept2
        {
            get
            {
                return (string)this["Dept2"];
            }

            set
            {
                this["Dept2"] = value;
            }
        }
        // added as example of different types
        [ConfigurationProperty("CheckDate", IsRequired = false, DefaultValue = "7/3/2014 1:00:00 PM")]
        public DateTime CheckDate
        {
            get
            {
                return (DateTime)this["CheckDate"];
            }

            set
            {
                this["CheckDate"] = value;
            }
        }
    }
}

然后,在web.config文件中进行设置:

<configuration>
  <configSections>
    <section name="MyConfig" type="WebApplication2.MyConfig, WebApplication2" />
  </configSections>
  <MyConfig Dept1="xyz.uvw.rst" Dept2="abc.def.ghi" />
...
</configuration>

然后你可以很容易地调用它,以及对许多类型的强类型和支​​持:

var dept1 = MyConfig.Settings.Dept1;
var dept2 = MyConfig.Settings.Dept2;
// strongly-typed
DateTime chkDate = MyConfig.Settings.CheckDate;  

我就是这样做的。使用内置的东西并为它创建一个类。易于配置转换,易于阅读和易于使用。

答案 1 :(得分:2)

在web.config中,您可以指定内置ConfigurationManager可以轻松访问的其他文件。例如,我们决定将连接字符串和应用程序设置分成单独的文件。您可以通过将其放在web.config中来完成此操作:

 <appSettings configSource="appsettings.config" />

然后您可以在&#39;常规&#39;中访问这些值。方式

ConfigurationManager.AppSettings["KeyHere"] 

连接字符串相同......

答案 2 :(得分:0)

这是一个古老的问题,但是如果有人需要知道……第一个geekzsters答案列出了如何编写配置类。然后,您指定一个自定义Config节,并在单独的文件中为其提供configSource。

<configuration>
  <configSections>
    <section name="myCustomSection" type="MyNamespace.MyCustomType" requirePermission="false" />
  </configSections>
</configuration>
<myCustomSection configSource="myConfigDir\myFile.config" />

然后在您的自定义配置文件中编写普通的xml配置

<?xml version="1.0" encoding="utf-8"?>
<myCustomSection>
  <myCustomType>
   <add name="pro1" value="abc" />
   <add name="prop2" value="cde" />
   <add name="prop3" value="efg" />
  </myCustomType>
</myCustomSection>

答案 3 :(得分:0)

除了Web config之外,读取配置文件的最简单方法是定义要读取的文件,如下所示:

  • webConfig

    <appSettings file="TestFile.config">
    <add key="webpages:Version" value="3.0.0.0"/>
    <add key="webpages:Enabled" value="false"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
    
  • TestFile.Config

     <appSettings>
     <add key="test" value="testData"/>
     </appSettings>
    

上面我们定义了要从Webconfig中读取配置的文件。因此,可以使用 ConfigurationManager.AppSettings ['test'] 来读取新创建的自定义配置文件中的值。