Custom section/collection in Web.Config

cllpse picture cllpse · Oct 12, 2011 · Viewed 30k times · Source

I've got a bunch of routes that I want to be able to throw in my Web.Config file. I need one key and two value fields for each section/item in the collection. Something along the lines of this...

<routes>
    <add
        key="AdministrationDefault"
        url="Administration/"
        file="~Administration/Default.aspx" />

    <add
        key="AdministrationCreateCampaign"
        url="Administration/CreateCampaign/"
        file="~/Administration/CreateCampaign.aspx" />

    <add
        key="AdministrationLogout"
        url="Administration/Leave/"
        file="~/Administration/Leave.aspx" />
</routes>

Is this possible?

Answer

Richard picture Richard · Oct 12, 2011

Yes. And not too hard once you have a start.

You'll need to create a ConfigurationSection derived class to define the <routes> section (and then add a <section> to the configuration to link the <routes> element to your type).

You'll then need a type to define each element of the collection and, flagged as default, a property on your second type for the collection.

After all this is set up, at runtime you access your configuration section as:

var myRoutes = ConfigurationManager.GetSection("routes") as RoutesConfigSection;

My blog has a few articles on the background to this: http://blog.rjcox.co.uk/category/dev/net-core/

As noted in another answer there is also coverage (a lot better than it used to be) on MSDN.