I’m creating a business application in .NET using MVC4. The application will be used by multiple corporate customers, each possessing their own branding elements (including a stylesheet and logo image). The UI calls web services for a back-end platform in order to populate various regions of the application; customer-specific parameters must be provided when calling these web services.
My goal is to deploy a single instance of the application while making the application dynamically load the appropriate brand scheme and web service parameters based on a portion of the URL itself. The application will be a public-facing consumer application (hosted by my organization on behalf of the corporate customer), so the URL must be easy to remember (and thereby not rely on querystring parameters for access), such as https://mysite.com/companyname.
The intent is to provide a product with a single code base and feature set (making the product easier to support than having multiple distinct deployments for each corporate customer) while supporting a limited degree of branding. I’m OK with a small bit of manual operational setup (such as creating a new app.config, web.config, or virtual directory for each customer).
Can anyone recommend a suggested approach or best practices for implementing this type of application? Note that if the URL structure must be parsed, I’ll need to ensure that the structure can be replicated properly in development, QA, and staging environments.
My current approach requires distinct deployments of the application to different customer-specific environments, with the custom branding and web service parameters referenced as “appsettings” keys in the web.config file, which is different for each customer. This is OK for a small number of deployments, but will get unwieldy as feature upgrades / bug fix pushes become necessary for tens or hundreds of customer sites. Thank you!
The easiest solution is to use a dynamic stylesheet for most of it. There is an ok example here Dynamic CSS for ASP.NET MVC? and a full source example http://www.codeproject.com/Articles/171695/Dynamic-CSS-using-Razor-Engine
The rest of it is details. You’ll want to parse the company identifier out of the url (or cookie – useful for testing it in dev/qa). You’ll want to pull the customer specific values out of storage, database or config file whatever is appropriate for you. One unrelated thing to think about. https://mysite.com/companyname. What if the company changes their name? You might want a user friendly looking but secretly technical url like https://mysite.com/companyname/590. You can show the user friendly name, but ignore it in your code and just use the company id. Then if the company changes names, no biggie – https://mysite.com/somethingElse/590.