Click here to Skip to main content
15,887,404 members
Articles / Web Development / ASP.NET

Using ZIP content for delivery over HTTP

Rate me:
Please Sign up or sign in to vote.
4.47/5 (9 votes)
30 Oct 2008MIT4 min read 38.6K   344   47  
This article shows how to use already compressed content for transmission over HTTP.
using System;
using System.Configuration;
using System.Web.Configuration;
using System.Collections.Generic;

namespace HttpZipFolder
{
    /// <summary>
    /// HttpZip configuration classes
    /// </summary>
    public class HttpZipConfigurationSection : ConfigurationSection
    {
        public const string SectionName = "httpZip";
        const string DefaultHttpZipPath = "~/httpzip.ashx";

        static ConfigurationProperty _itemsProperty = new ConfigurationProperty("", typeof(HttpZipConfiguration), null, ConfigurationPropertyOptions.IsDefaultCollection);
        static ConfigurationProperty _pathProperty = new ConfigurationProperty("path", typeof(string), DefaultHttpZipPath, ConfigurationPropertyOptions.None);
        static ConfigurationPropertyCollection _properties = new ConfigurationPropertyCollection();

        static HttpZipConfigurationSection()
        {
            _properties.Add(_itemsProperty);
            _properties.Add(_pathProperty);
        }

        protected override ConfigurationPropertyCollection Properties
        {
            get { return _properties; }
        }

        [ConfigurationProperty("", IsDefaultCollection = true)]
        public HttpZipConfiguration Items
        {
            get { return (HttpZipConfiguration)base[_itemsProperty]; }
        }

        [ConfigurationProperty("path", DefaultValue = DefaultHttpZipPath)]
        public string Path
        {
            get { return (string)base[_pathProperty]; }
            set { base[_pathProperty] = value; }
        }

        public static HttpZipConfigurationSection Current
        {
            get { return (HttpZipConfigurationSection)WebConfigurationManager.GetSection(SectionName); }
        }
    }

    [ConfigurationCollection(typeof(HttpZipConfigurationItem))]
    public class HttpZipConfiguration : ConfigurationElementCollection
    {
        public new HttpZipConfigurationItem this[string name]
        {
            get { return (HttpZipConfigurationItem)BaseGet(name); }
        }

        public HttpZipConfiguration()
        {
        }

        protected override ConfigurationElement CreateNewElement()
        {
            return new HttpZipConfigurationItem();
        }


        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((HttpZipConfigurationItem)element).Name;
        }

        public void Add(HttpZipConfigurationItem item)
        {
            BaseAdd(item);
        }

        public void Clear()
        {
            BaseClear();
        }

        public void Remove(string name)
        {
            BaseRemove(name);
        }
    }

    public class HttpZipConfigurationItem : ConfigurationElement
    {
        static ConfigurationProperty _nameProperty = new ConfigurationProperty("name", typeof(string), null, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey);
        static ConfigurationProperty _prefixProperty = new ConfigurationProperty("prefix", typeof(string), null, ConfigurationPropertyOptions.IsRequired);
        static ConfigurationProperty _zipPathProperty = new ConfigurationProperty("zipPath", typeof(string), null, ConfigurationPropertyOptions.IsRequired);
        static ConfigurationPropertyCollection _properties = new ConfigurationPropertyCollection();

        static HttpZipConfigurationItem()
        {
            _properties.Add(_nameProperty);
            _properties.Add(_prefixProperty);
            _properties.Add(_zipPathProperty);
        }

        protected override ConfigurationPropertyCollection Properties
        {
            get { return _properties; }
        }

        [ConfigurationProperty("name", IsKey = true, IsRequired = true)]
        public string Name
        {
            get { return (string)base[_nameProperty]; }
            set { base[_nameProperty] = value; }
        }

        [ConfigurationProperty("prefix", IsRequired = true)]
        public string Prefix
        {
            get { return (string)base[_prefixProperty]; }
            set { base[_prefixProperty] = value; }
        }

        [ConfigurationProperty("zipPath", IsKey = true, IsRequired = true)]
        public string ZipPath
        {
            get { return (string)base[_zipPathProperty]; }
            set { base[_zipPathProperty] = value; }
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The MIT License


Written By
Software Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions