2012-01-27 16 views
6

tengo el siguiente código que lee el userAgent y hace algo de lógica basada en los valores coincidentes por un indexOf:Lectura de la userAgent con C#

String userAgent; 
userAgent = Request.UserAgent; 
// If it's not IE 
if (userAgent.IndexOf("MSIE") < 0) 
{ 
    return RedirectToAction("Index", "Home", new { area = "Dashboard" }); 
} 
// If it's IE BUT ChromeFrame 
else if(userAgent.IndexOf("ChromeFrame") > -1) 
{ 
    return RedirectToAction("Index", "Home", new { area = "Dashboard" }); 
} 
// It's just IE 
else 
{ 
    return View("ChromeFrame"); 
} 

Si se trata de IE, entonces debe volver la vista o si su IE pero contiene ChromeFrame, entonces debería redireccionar y es otro navegador, entonces debería redireccionar también.

Creo que el problema es con la parte > 0 del código. ¿Cuál es la forma correcta de comparar información? Gracias.

+0

no debe cambiar el código de manera que las respuestas que ya tiene ya no apliquen ... – Yahia

Respuesta

1

Debe usar > -1 ya que de lo contrario no funcionará si la subcadena está al principio de la cadena.

1

IndexOf devuelve -1 si la cadena no se encuentra ... ver MSDN para referencia.

7

Simplemente use el contains method, lo que hará que su código sea menos críptico y menos propenso a errores.

if (userAgent.Contains("MSIE")) 
{ 
    return RedirectToAction("Index", "Home", new { area = "Dashboard" }); 
}