Hero

Cómo crear un Configuration Section en ASP.NET

Julio 23, 2013

aisen
C#
Microsoft
.Net
ASP.Net
Programación

Alguna vez han necesitado crear una configuración en el sistema que se pueda modificar desde el web.config del proyecto, y si esta configuración no tiene información crearle en código un valor por defecto.

Para realizar esto debemos de crear secciones de configuración en el web.config.

A continuación les mostrare como podemos implementar el Configuration Section en ASP.NET.

Para implementarlo necesitaremos crear lo siguiente:

  • Una clase para almacenar el valor por defecto de nuestra configuración
  • Una clase para leer el Configuration Section
  • Configurar el Web.config
  • Utilizar la configuración
  1. Creamos la clase para almacenar el valor por defecto.

Primero importaremos el siguiente namespace:

using System.Configuration

Tenemos que crear una variable ConfigurationProperty donde se almacenaremos nuestra configuración por defecto, también necesitamos una variable ConfigurationPropertyCollection, esta variable almacenara la lista de todas nuestras propiedades de configuración; le damos un valor por defecto a nuestra propiedad (_expirytime).

En caso de no tener esta propiedad configurada en el Web.config el valor que le coloquemos acá seria el valor de la propiedad.

namespace Configuracion
{
    /// <summary>
    /// Heredamos de la clase ConfigurationSection
    /// </summary>
    public class TimeCookieConfiguration: ConfigurationSection
    {
        //Creamos una variable de configuracion de la propiedad
        private static readonly ConfigurationProperty _expirytime;
        //Creamos una varialble de colecion de configurarion
        private static readonly ConfigurationPropertyCollection _listProperties = new ConfigurationPropertyCollection();

        static TimeCookieConfiguration()
        {
            //Agregamos la nueva propiedad
            _expirytime = new ConfigurationProperty("expirytime", typeof(int), 1);
            //Añadimos la propiedad a la colecion
            _listProperties.Add(_expirytime);
        }

        /// <summary>
        /// Metodo que retorna la colecion de propiedades
        /// </summary>
        protected override ConfigurationPropertyCollection Properties
        {
            get
            {
                return _listProperties;
            }
        }

        /// <summary>
        /// Seteamos la propiedad
        /// </summary>
        public int ExpiryTime
        {
            get
            { 
                return(int)base[_expirytime];
            }
            set
            {
                base[_expirytime] = value;
            }

        }
    }
}
  1. Creamos la clase para leer el Configuration Section.

Esta clase será la que lea y traiga el valor de la propiedad del Web.config

namespace Configuracion
{
    public sealed class TimeCookieReader
    {
        /// <summary>
        /// Lee la configuracion del Web.config
        /// </summary>
        /// <returns></returns>
        public static TimeCookieConfiguration GetActualConfig()
        {
            TimeCookieConfiguration configuration = (TimeCookieConfiguration)ConfigurationManager.GetSection("timecookies");
            
            if(configuration != null)
            {
                //Retorna la configuracion
                return configuration;
            }
            return null;

        }
    }
}
  1. Preparamos el Web.config.

Agregamos la sección al Web.config le damos un nombre (name) y le decimos su tipo (type), esta tipo sera en nuestro caso el namespace Configuration y el nombre de la clase quedando de esta manera Configuration.TimeCookieConfiguration.

Con el nombre que le pusimos a la sección la agregamos al Web.config y le damos el valor a la propiedad que creamos (_expirytime) con el valor que queramos que tenga nuestra sección de configuración.

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="timecookies" type="Configuracion.TimeCookieConfiguration" />
  </configSections>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
    </system.web>
  <timecookies expirytime="2"></timecookies> 
</configuration>
  1. Utilizamos el Configuration Section.

Creamos una cookie y le colocamos como fecha de vencimiento el valor que tengamos configurado en el Web.config, sino está configurada la propiedad en el Web.config esta tendrá el valor por defecto creado en nuestra primera clase.

        protected void Page_Load(object sender, EventArgs e)
        {
            //Creamos la cookie
            HttpCookie Cookie = new HttpCookie("CookiePrueba");

            //Creamos una variable datetime con el tiempo actual
            DateTime Time = DateTime.Now;

            try
            {
                //Buscamos la seccion del tiempo de expiracion de la cookie en el Web.config
               Configuracion.TimeCookieConfiguration timeCookie = (Configuracion.TimeCookieConfiguration)ConfigurationManager.GetSection("timecookies");

                if (timeCookie != null)
                {
                    //Añadimos los dias que esten configurados en el Web.config
                    Time.AddDays(timeCookie.ExpiryTime);
                    Cookie.Expires = Time;
                }
            }
            catch (Exception) {
                Cookie.Expires = Time;
            }

        }

Espero les sea de ayuda.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.