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!
