Link to home
Start Free TrialLog in
Avatar of juststeve
juststeve

asked on

Using OnAppStart to determine the site's frosting

Nutshell:
How (or if) to use the Global.asa as a way to clone a series of sites with a common code base but varying front-end elements.

Bigger Picture:
I have a donut shop and have found that if I deploy a series of websites - one for each of the donut types I manufacture (myGlazedDonut.com; mySprinkledDonut.com; myPlainDonut.com, and so on) - I'm better able to serve the interests of my customers than if I host one central 'DonutsRUs.com' domain. (taken, darnit).

I'm thinking the best code reuse will be one backend tier that drives multiple websites, one per frosting option. So I'd like to code a webapp that understands which frosting facade to present based on which domain it's running within.

So if the app wakes up to find it's running in the 'myFrostedDonut.com' domain it knows to display 'sales@myFrostedDonut.com' for the email address, it knows which .jpgs to use for Banners and Footers, it knows which google-analytics code to use. It even knows that on the 'Contact Us' the reader will see: Hi, from your loyal friends at Plain Donuts. Did you know that plain donuts are much better for you than those fattening things found at places like myFrostedDonuts.com.

Point is there are a lot of different 'search/replace' types of operations taking place in code. Usually I've used the web.config to store global variables but the above scenario is more complex than just a database connection string - there are a lot of exception conditions to account for, not every property has a one-to-one relation to each other domain.

I'm thinking I want to add logic at the Global.asa but need to see some examples of how others have approached similar problems.

thx
Avatar of Member_6283346
Member_6283346

Hi! There are many ways to accomplish what you want, first I would advise to keep reusable in a separate library.
Then, you can make different site look using different master pages or css classes while using the same code, the other option is to use variation controls (controls, that renders different content based on some condition).
If you prefer variation controls, then you can place mode param in web.config or Appliction param collection - these are most suitable places because they are available across all application. If you prefer not to use web.config, then you can init Application param in global.asax, based on current url, like this:

protected void Application_Start(object sender, EventArgs e)
{
    if(string.Compare(HttpContext.Current.Request.Url.Host, "myFrostedDonut.com", true) == 0)
   {
       HttpContext.Current.Application["SiteMode"]  = "Frosted";
   }
}

Then in your code you can read it like:
string mode = Application["SiteMode"] as string;
Avatar of juststeve

ASKER

I'm not clear on the difference between web.config-based vs your reference to variation controls. How is something created in global.asax less available than web.config?

thx
ASKER CERTIFIED SOLUTION
Avatar of Member_6283346
Member_6283346

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial