Introduction

This article will demonstrate us how we can get/read the configuration setting from Web.Config or App.Config in C#. There are different purposes to set the values inside the configuration file and read their values based on defined keys,  we define those values inside the configuration section which might be need to make it more secure, it could be some secret keys or the value which should get frequently.

Using the code

Today I will show you, four different ways to get the values from configuration section. For this demonstration, I am going to create a simple Console Application and provide the name as “ConfigurationExample”. Just create one Console Application as following.

Just follow: New Project > Visual C# > Console Application

We need to add System.Configuration assembly reference to access configuration setting using ConfigurationManager. To add reference, just right click to References and Click to Add References.

Now we can see that System.Configuration reference added successfully with our project.

So, let’s move to different ways to add the values inside the config file and approach we follow to get it.

Approach One

Let’s take one example, where we need to add some application level settings and access them based on their keys. We can add these setting either inside Web.Config or App.Config. But we need to add <appSettings> section inside the configuration section.

Just follow the following example, where inside the appSettings section; we have defined few keys and their values.

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="Title" value="Configuration Example"/>
<add key="Language" value="CSharp"/>
</appSettings>
</configuration>

To access these values, there is one static class as named “ConfigurationManager” which has one getter property as named AppSettings. We can just pass the key inside the AppSettings and get the desired value from AppSettings section as following.

public static void GetConfigurationValue()
{
var title = ConfigurationManager.AppSettings["title"];
var language = ConfigurationManager.AppSettings["language"]; Console.WriteLine(string.Format("'{0}' project is created in '{1}' language ", title, language));
}

When we implement the above code, we get following out.

Approach Two

Let’s move to next example, just think about if we need to add settings inside section for separation. So, in this situation, we can create custom section inside the configuration section in App.Config/Web.Config as following. Section can make your data more readable and understandable based on your section name.

In following example, we have just created one custom section as named “ApplicationSettings” and added all key/value pairs separately.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="ApplicationSettings" type="System.Configuration.NameValueSectionHandler"/>
</configSections> <ApplicationSettings>
<add key="ApplicationName" value="Configuration Example Project"/>
<add key="Language" value="CSharp"/>
<add key="SecretKey" value="xxxxxxx"/>
</ApplicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>

To access custom section settings, first we need to find out the section using GetSection method which is defined inside the ConfigurationManager class and cast the return value as NameValueCollection. It will return all the keys available inside this custom section and based on keys we can get values easily as following.

public static void GetConfigurationUsingSection()
{
var applicationSettings = ConfigurationManager.GetSection("ApplicationSettings")
as NameValueCollection; if (applicationSettings.Count == )
{
Console.WriteLine("Application Settings are not defined");
}
else
{
foreach (var key in applicationSettings.AllKeys)
{
Console.WriteLine(key + " = " + applicationSettings[key]);
}
} }

When we implement the above code, we get following out.

Approach Three

Now move to some tough stuff, here we are going to create section inside the group, so that if required we can add multiple sections in same group. It is basically grouping the same type of section in a group.

In following example, we have created one group as named “BlogGroup” and inside that we have defined one section as named “PostSetting” and its type as a NameValueSectionHandler. “PostSetting” section is containing all the key/value pair separately as following.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="BlogGroup">
<section name="PostSetting" type="System.Configuration.NameValueSectionHandler"/>
</sectionGroup>
<section name="ProductSettings" type="ConfigurationExample.ProductSettings, ConfigurationExample"/>
</configSections> <BlogGroup>
<PostSetting>
<add key="PostName" value="Getting Started With Config Section in .Net"/>
<add key="Category" value="C#"></add>
<add key="Author" value="Mukesh Kumar"></add>
<add key="PostedDate" value="28 Feb 2017"></add>
</PostSetting>
</BlogGroup> <ProductSettings>
<DellSettings ProductNumber="" ProductName="Dell Inspiron" Color="Black" Warranty="2 Years" ></DellSettings>
</ProductSettings> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

To read these types of configuration setting, we need to access section based on section group and then we can get all the keys and their values as following code is doing.

public static void GetConfigurationUsingSectionGroup()
{
var PostSetting = ConfigurationManager.GetSection("BlogGroup/PostSetting") as NameValueCollection;
if (PostSetting.Count == )
{
Console.WriteLine("Post Settings are not defined");
}
else
{
foreach (var key in PostSetting.AllKeys)
{
Console.WriteLine(key + " = " + PostSetting[key]);
}
}
}

When we implement the above code, we get following out.

Approach Four

At last we are on advance stage of configuration settings. Sometimes it is required to setup your all key/value pair based on custom class behavior so that we can control it behavior form outer world.

See the following class “DellFeatures”, which shows some custom properties of Dell laptop and we need to add it inside the configuration section. Following class contains some default values if value is not available in configuration section.

 
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConfigurationExample
{
public class DellFeatures : ConfigurationElement
{
[ConfigurationProperty("ProductNumber", DefaultValue = , IsRequired = true)]
public int ProductNumber
{
get
{
return (int)this["ProductNumber"];
}
} [ConfigurationProperty("ProductName", DefaultValue = "DELL", IsRequired = true)]
public string ProductName
{
get
{
return (string)this["ProductName"];
}
} [ConfigurationProperty("Color", IsRequired = false)]
public string Color
{
get
{
return (string)this["Color"];
}
}
[ConfigurationProperty("Warranty", DefaultValue = "1 Years", IsRequired = false)]
public string Warranty
{
get
{
return (string)this["Warranty"];
}
}
}
}

To return this setting, we are going to create on more class which returns this as a property. Here we can also add multiple classes as properties.

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConfigurationExample
{
public class ProductSettings : ConfigurationSection
{
[ConfigurationProperty("DellSettings")]
public DellFeatures DellFeatures
{
get
{
return (DellFeatures)this["DellSettings"];
}
}
}
}

To implement it inside the configuration section, we are going to change the type of “ProductSettings” as “ConfigurationExample.ProductSettings” which will return all the property of DellFeaturs class.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections> <section name="ProductSettings" type="ConfigurationExample.ProductSettings, ConfigurationExample"/>
</configSections> <BlogGroup>
<PostSetting>
<add key="PostName" value="Getting Started With Config Section in .Net"/>
<add key="Category" value="C#"></add>
<add key="Author" value="Mukesh Kumar"></add>
<add key="PostedDate" value="28 Feb 2017"></add>
</PostSetting>
</BlogGroup> <ProductSettings>
<DellSettings ProductNumber="" ProductName="Dell Inspiron" Color="Black" Warranty="2 Years" ></DellSettings>
</ProductSettings> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

To access this type of configuration, same we need to get custom section first and rest of will be accessible very easily as following code.

public static void GetConfigurationUsingCustomClass()
{
var productSettings = ConfigurationManager.GetSection("ProductSettings") as ConfigurationExample.ProductSettings;
if (productSettings == null)
{
Console.WriteLine("Product Settings are not defined");
}
else
{
var productNumber = productSettings.DellFeatures.ProductNumber;
var productName = productSettings.DellFeatures.ProductName;
var color = productSettings.DellFeatures.Color;
var warranty = productSettings.DellFeatures.Warranty; Console.WriteLine("Product Number = " + productNumber);
Console.WriteLine("Product Name = " + productName);
Console.WriteLine("Product Color = " + color);
Console.WriteLine("Product Warranty = " + warranty);
}
}

When we implement the above code, we get following out.

Four Ways to Read Configuration Setting in C#(COPY)的更多相关文章

  1. maven setting.xml 配置(有效)

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  2. System Center Configuration Manager 2016 配置安装篇(Part3)

    SCCM 2016 配置管理系列(Part 1- 4) 介绍AD01上配置了Active Directory域服务(ADDS),然后将Configuration Manager服务器(CM16)加入到 ...

  3. System Center Configuration Manager 2016 配置安装篇(Part1)

    SCCM 2016 配置管理系列(Part 1- 4) 介绍AD01上配置了Active Directory域服务(ADDS),然后将Configuration Manager服务器(CM16)加入到 ...

  4. System Center Configuration Manager 2016 必要条件准备篇(Part1)

    步骤4.创建系统管理容器 SCCM 2016 配置管理系列(Part 1- 4) 介绍AD01上配置了Active Directory域服务(ADDS),然后将Configuration Manag ...

  5. System Center Configuration Manager 2016 域准备篇(Part4)

    步骤4.创建系统管理容器 注意:在Active Directory域控制器服务器(AD01)上以本地管理员身份执行以下操作 有关您为何这样做的详细信息,请参阅https://docs.microsof ...

  6. 微软企业库5.0 学习之路——第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息

    在介绍完企业库几个常用模块后,我今天要对企业库的配置文件进行处理,缘由是我打开web.config想进行一些配置的时候发现web.config已经变的异常的臃肿(大量的企业库配置信息充斥其中),所以决 ...

  7. Spark 官方文档(4)——Configuration配置

    Spark可以通过三种方式配置系统: 通过SparkConf对象, 或者Java系统属性配置Spark的应用参数 通过每个节点上的conf/spark-env.sh脚本为每台机器配置环境变量 通过lo ...

  8. maven -- 学习笔记(二)之setting.xml配置说明(备忘)

    setting.xml配置说明,learn from:http://pengqb.javaeye.com,http://blog.csdn.net/mypop/article/details/6146 ...

  9. maven之(六)setting.xml的配置文件详解

    setting.xml配置文件 maven的配置文件settings.xml存在于两个地方: 1.安装的地方:${M2_HOME}/conf/settings.xml 2.用户的目录:${user.h ...

随机推荐

  1. 《2019年小米春季上海 PHP 实习生招聘面试题》部分答案解析

    1 丶 Nginx 怎么实现负载均衡 这个还是比较简单 1.轮询 这种是默认的策略,把每个请求按顺序逐一分配到不同的 server,如果 server 挂掉,能自动剔除. 2.最少连接 把请求分配到连 ...

  2. IT兄弟连 HTML5教程 CSS3揭秘 小结及习题

    小结 CSS3对于开发者来说,给web应用带来了更多的可能性,极大提高了开发效率.CSS3在选择器上的支持可谓是丰富多彩,使得我们能够灵活的控制样式,而不必为元素进行规范化的命名.CSS3支持的动画类 ...

  3. 通过jgit一次性升级fastjson版本

    背景:笔者所在公司经历了三次fastjson的升级,由于集群,工程数量众多,每次升级都很麻烦.因此开发了一个java的升级工具. 功能介绍: 功能介绍:一个jar文件,通过java -jar命令,输入 ...

  4. Blazor入坑指南

    一 为什么用Blazor 原本就是后端程序员, 技术栈基于C#, 懂一点前端jQuery/Html 不管是webAssembly还是ServerSide, 就是想方便地做单页应用, 能wasm自然更好 ...

  5. Java后端高频面试题汇总

    Java后端面试题汇总 近来,分专题更新了Java后端面试题,此文章对这些文章做一个目录式的整理,方便查看 1.Java基础   https://www.cnblogs.com/autism-dong ...

  6. javaWeb核心技术第六篇之BootStrap

    概述: Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. 作用: 开发响应式的页面 响应式:就是一个网站能够兼容多个终端 节约开发 ...

  7. 个人项目开源之Django图书借阅系统源代码

    Django写的模拟图书借阅系统源代码已开源到码云 源代码

  8. 【Java基础】Java中的反射机制

    一.反射的理解 (1)正射 在理解反射这个概念之前,我们先来理解Java中的“正射”. 我们在编写代码时,当需要使用到某一个类的时候,必定先会去了解这是一个什么类,是用来做什么的,有怎么样的功能. 之 ...

  9. Export Receives The Errors ORA-1555 ORA-22924 ORA-1578 ORA-22922 (Doc ID 787004.1)

    Export Receives The Errors ORA-1555 ORA-22924 ORA-1578 ORA-22922 (Doc ID 787004.1) APPLIES TO: Oracl ...

  10. 电池的QPNP模式

    名词解释: CV:Constant Voltage恒压 SMMB charger:Switch-ModeBattery Charger and Boost peripheral开关模式电池充电器和升压 ...