Recentemente precisei redirecionar os usuários que faziam acesso de dispositivos móveis para uma nova área do meu site utilizando MVC4 onde todo o seu conteúdo era mais “limpo” e com menos funcionalidades.
Bom, para isto fiz um método na chamada da controller que fazia o primeiro acesso e antes de renderizar a primeira View eu já verificava qual dispositivo o usuário estaria utilizando.
Veja como ficou :
public ActionResult Index() { if (VerificaMobile()) return RedirectToAction("Index", "Home", new { area = "Mobile" }); return View(); } public bool VerificaMobile() { if (this.Request.Browser.IsMobileDevice || Request.ServerVariables["HTTP_X_WAP_PROFILE"] != null || (Request.ServerVariables["HTTP_ACCEPT"] != null && Request.ServerVariables["HTTP_ACCEPT"].ToLower().Contains("wap"))) { return true; } else if (Request.ServerVariables["HTTP_USER_AGENT"] != null) { 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", "windows phone" }; foreach (string s in mobiles) { if (Request.ServerVariables["HTTP_USER_AGENT"].ToLower().Contains(s.ToLower())) { return true; } } } return false; }
Este método pega o agente de navegação e verifica se o mesmo está em alguma das propriedades que eu coloquei, se sim redireciona o usuário para a área mobile do site, se não renderiza a View normalmente.
Espero que tenha sido útil, pois me ajudou bastante! 🙂
Um bom final de semana a todos!