Buenas!
1. No debes meter código de autorización en una vista (Index.cshtml) porque como dices luego tendrás problemas si alguien navega a cualquier otro sitio. Aunque meterlo en _ViewStart.cshtml te funcionaría estarías rompiendo el patrón MVC que dice que las
vistas tan solo deben mostrar información así que mejor olvídemonos de ellas para realizar tareas de autorización :)
2. Si no lo puedes meter en las vistas, la otra opción lógica son los controladores. En lugar de meter el código en Index.html lo metes en la acción del controlador que termina devolviendo esta vista. Claro que esto tiene el mismo problema que antes, en
el sentido de que si alguien no navega a /home/index (o la acción que sea que tiene este código) no te funcionaria.
Puedes "copiar y pegar" esta llamada a ValidateUser y ponerla en toooodas las acciones que requieran esta validación, pero esto aparte de un coñazo es muy proclive a errores. Para ello se idearon los filtros en ASP.NET MVC. Con ellos decoras una acción con
un filtro y se ejecuta este filtro, usualmente antes de ejecutar la acción. [Authorize] es un ejemplo de un filtro. Sigues teniendo que decorar tooooodas las acciones, eso sí. Usar filtros tiene más ventajas: si aplicas el filtro al controlador (en lugar de
a una acción) se aplicará a todas las acciones de dicho controlador. Y si lo registras como filtro global se aplicará a todas las acciones de todos los controladores.
Una posible solución a tu problema, pasa por crear un filtro que realice dicha llamda a ValidateUser. En tu caso se trata de un filtro de autorización, ya que su función es esa: autorizar o no una llamada. Luego tu decides a que acciones aplicas este filtro.
Y cuan complejo es crear un filtro de autorización? Pues no mucho, básicamente te basta con derivar de FilterAttribute e implementar IAuthorizationFilter. Esto te obliga a implementar un solo método (OnAuthorization creo que se llama). Dicho método debe
"no hacer nada" si la llamada se autoriza o colocar un ActionResult específico (un RedirectResult o lo que sea) que se ejecutará "en lugar" de la acción si esta no se autoriza. Aquí lo explican con más detalle: http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx
[Authorize] es un filtro de autorización por lo que realmente lo que estás haciendo es implementarte tu propio "Authorize".
Hay más opciones, pero creo que esta sería la mejor te puede encajar!
Saludos!
Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis