Experiencias de un programador curioso del SEO
jmnieves
Este usuario no ha compartido ninguna información biográfica
Web: http://www.juanmarianieves.com
Jabber / Google Talk: jmnieves@juanmarianieves.com
Entradas de jmnieves
Evitar el cache de los navegadores en ASP MVC
11 ago
Cuando desarrollamos nuestras aplicaciones web , muchas veces nos encontramos con un problema con el cual no contabamos la cache del navegador del usuario.
Para solventar este problema en ASP MVC contamos con la posibilidad de utilizar ActionFilterAttribute , en este articulo os enseñare a evitar el cache mediante un CustomFilter en ASP MVC.
Primero de todo crearemos un CustomFilter:
public class NoCacheFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext ActionContext)
{
HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
}
}
Como veis sobreescribimos la función OnActionExecuting que nos permite captura la llamada al action. En ella definimos la cache del Response de nuestra action en asp mvc.
<h6>Implementación del NoCacheFilter en nuestras actions</h6>
[NoCacheFilter()]
public ActionResult Index()
{
return View();
}
Como siempre para vuestra comodidad os dejo el código en pastebin
Custom ActionFilter
8 jun
Ando liado con un proyecto en asp mvc 2.0 y ya sabeis que me gusta compartir lo que voy aprendiendo asi que hoy os voy a proponer aprender a realizar nuestro propio Custom ActionFilter. Un ActionFilter nos permite interceptar la llamada a un action antes de empezar a ejecutar el código de la misma. Esto nos puede servir por ejemplo para reestablecer la cultura de la aplicación o como en el ejemplo que os voy a mostrar forzar a un action de nuestro controlador a ser accesible solo cuando el usuario este autentificado.
Código de nuestro Custom Action Filter
public class OnlyAuthenticatedFilterAttribute : ActionFilterAttribute
{
public OnlyAuthenticatedFilterAttribute()
{
}
public override void OnActionExecuting(ActionExecutingContext ActionContext)
{
if (!ActionContext.HttpContext.User.Identity.IsAuthenticated)
{
string returnUrl = "~/Login/?ReturnUrl=" + HttpContext.Current.Request.RawUrl;
ActionContext.HttpContext.Response.Redirect(returnUrl, true);
}
}
}
Como veis sobreescribimos la función OnActionExecuting que nos permite captura la llamada al action. En ella utilizando el ActionExecutingContext comprobamos si el usuario actual esta autenficado y en caso de no estarlo lo redirigimos a una página de login.
Implementación del Custom Filter en nuestra Action
[OnlyAuthenticatedFilterAttribute()]
public ActionResult Index()
{
return View();
}
Espero que este ejemplo os haya sido claro y os sea útil para vuestros proyectos en asp mvc 2. Como siempre para vuestra comodidad os dejo el código en pastebin
Bloggers & Guadalpin 2010
12 may
Menos mal que reservé en el mejor hotel en Marbella… si no me hubiera sido imposible llegar a tiempo a mi reunión con Antonio Cañestro ,concejal de obras publicas del municipio costero de Fuengirola.
Era una reunión a la cual no podia llegar tarde, el futuro de la fábrica familiar dependia de ello.
Mi familia desde que mi memoria llega alcanzar se ha dedicado a la fabricación de losas y la posibilidad de proveer al municipio de Fuengirola de losas de piedra para su nuevo paseo marítimo, era un negocio que sacaria a flote la fábrica en estos tiempos tan duros de crisis.
Después de degustar un magnifico desayuno , con las pilas cargadas me reuní con el concejal y despues de los típicos flecos me confirmo que nuestra propuesta habia ganado el concurso. La fábrica de mis padres habia vuelto a lidiar con otra crisis y mientras regresaba al hotel disfrute del paisaje marino como si de un trofeo se tratase.
Este relato lo he escrito con motivo de participar en el Bloggers & Guadalpin 2010 un concurso de relatos breves que como premio ganas una estancia
.
AsParallel usa todos tus nucleos en LINQ
10 may
Hará ya unos dias estuve en la presentación de visual studio 2010 en barcelona y una de las cosas que más me gustarón fue AsParallel() una sencilla función que potencia LINQ al número de nucleos que disponga tu servidor. Es lo que los chicos de Redmond llama PLINQ.
Su implementación es tan sencilla como añadir nuestras sentencias LINQ la función .AsParallel() ejemplo:
IEnumerable<T> data = ...; var q = data.AsParallel().Where(x => x.Id > pId).ToList();
Y aqui acaba el articulo , AsParallel() es tan simple de implementar y sin embargo nos abre el mundo del multithreading en nuestras consultas LINQ.
Proteger emails de los robots mediante javascript y c#
1 feb
En este articulo os hablare de como proteger emails de los robots de spam mediante javascript en c#, muchas veces nos vemos obligados a mostrar direcciones de correo electronico en nustras páginas con el riesgo de que esas cuentas caigan en manos de robots spammers y colapsar dichas cuentas de emails de publicidad no deseada. A continuación os dejo una función en c# que sustituira los emails por códigos en javascript que los robots no serán capaces de descifrar:
Función en C# para proteger emails de los robots mediante javascript
/// <summary>
/// Función que devuelve un script para proteger un email de los robots
/// </summary>
/// <param name="email">Email a proteger</param>
/// <returns></returns>
public static string HideEmail(string email)
{
string script;
string character_set = "+-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
string key = ShuffleWord(character_set); //Reordena character_set aleatoriamente
string cipher_text = "";
Random rnd = new Random();
string id = rnd.Next().ToString();
for (int i=0;i<email.Length;i++)
{
cipher_text += key[character_set.IndexOf(email[i])];
}
script = string.Format("var a=\"{0}\";\nvar b=a.split(\"\").sort().join(\"\");\nvar c=\"{1}\";var d=\"\";\nfor(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));\ndocument.getElementById(\"{2}\").innerHTML=\"<a href='mailto:'\" + d + \"'>\" + d + \"</a>\";",key,cipher_text,id);
script = "<script type=\"text/javascript\">\n/*<![CDATA[*/" + script + "/*]]>*/\n</script>";
return "<span id='" + id + "'>\n[email protegido mediante javascript]\n</span>\n" + script;
}
/// <summary>
/// Función que reordena un string de forma aleatoria
/// </summary>
/// <param name="s">Cadena a reordenar</param>
/// <returns></returns>
public static string ShuffleWord(string s)
{
Random r = new Random((int)(new TimeSpan()).Ticks);
System.Collections.ArrayList arl = new System.Collections.ArrayList();
string strFinal = String.Empty;
int temp = 0;
if (s.Length > 2)
{
for (int i = 1; i < s.Length - 1; i++)
{
arl.Add(i);
}
for (int c = 1; c < s.Length -1 ; c++)
{
temp = r.Next(arl.Count);
strFinal += s[(int)arl[temp]].ToString();
arl.RemoveAt(temp);
}
strFinal = s[0] + strFinal + s[s.Length-1];
return strFinal;
}
return s;
}
Código html resultante
<span id='1344355154'>
[email protegido mediante javascript]
</span>
<script type="text/javascript">
/*<![CDATA[*/var a="+hnjV@WtNxDFQaPy.pwbEkmv0_RrZO27KBuXe-HGqMd4AofCL58SgYJ6liUsTI1c93z";
var b=a.split("").sort().join("");
var c="36SosoaCYM5gn46Y";var d="";
for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));
document.getElementById("1344355154").innerHTML="<a href='mailto:'" + d + "'>" + d + "</a>";/*]]>*/
</script>
Como siempre para vuestra comodidad tambien os la dejo disponible en pastebin.