Detect Mobile Device HttpModule
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Diagnostics; namespace RethinkMovement.Domain { public class DetectMobileDevicesHttpModule : IHttpModule { public void Dispose() { } public void BeginRequest(Object s, EventArgs e) { //Debugger.Break(); HttpApplication context = s as HttpApplication; if (isMobileBrowser(context.Context)) { string mobilesite = System.Web.Configuration.WebConfigurationManager.AppSettings["MobileSite"]; if (mobilesite != null) { Uri mobile = new Uri(mobilesite); if (context.Request.Url.Host == mobile.Host) return; string urlrefer = ""; if (context.Context.Request.UrlReferrer != null) { urlrefer = context.Context.Request.UrlReferrer.Host; if (urlrefer == mobile.Host) return; } try { context.Context.Response.Redirect(mobilesite); //context.Response.Status = "301 Moved Permanently"; //context.Response.AddHeader("Location", mobilesite); //context.Response.Flush(); //context.Response.End(); } catch (Exception exc) { throw; } } } } public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(BeginRequest); } public bool isMobileBrowser(HttpContext context) { //GETS THE CURRENT USER CONTEXT //HttpContext context = HttpContext.Current; //FIRST TRY BUILT IN ASP.NT CHECK if (context.Request.Browser.IsMobileDevice) { return true; } //THEN TRY CHECKING FOR THE HTTP_X_WAP_PROFILE HEADER if (context.Request.ServerVariables["HTTP_X_WAP_PROFILE"] != null) { return true; } //THEN TRY CHECKING THAT HTTP_ACCEPT EXISTS AND CONTAINS WAP if (context.Request.ServerVariables["HTTP_ACCEPT"] != null && context.Request.ServerVariables["HTTP_ACCEPT"].ToLower().Contains("wap")) { return true; } //AND FINALLY CHECK THE HTTP_USER_AGENT //HEADER VARIABLE FOR ANY ONE OF THE FOLLOWING if (context.Request.ServerVariables["HTTP_USER_AGENT"] != null) { //Create a list of all mobile types string[] mobiles = new[] { "midp", "j2me", "avant", "docomo", "novarra", "palmos", "palmsource", "240x320", "opwv", "chtml", "pda", "windows ce", "mmp/", "blackberry", "mib/", "symbian", "wireless", "nokia", "hand", "mobi", "phone", "cdm", "up.b", "audio", "SIE-", "SEC-", "samsung", "HTC", "mot-", "mitsu", "sagem", "sony" , "alcatel", "lg", "eric", "vx", "NEC", "philips", "mmm", "xx", "panasonic", "sharp", "wap", "sch", "rover", "pocket", "benq", "java", "pt", "pg", "vox", "amoi", "bird", "compal", "kg", "voda", "sany", "kdd", "dbt", "sendo", "sgh", "gradi", "jb", "dddi", "moto", "iphone","ipad" }; //Loop through each item in the list created above //and check if the header contains that text foreach (string s in mobiles) { if (context.Request.ServerVariables["HTTP_USER_AGENT"]. ToLower().Contains(s.ToLower())) { return true; } } } return false; } } }