Recente il 2...
Allora ti conviene fare una cosa del genere:
In questo caso a chi chiama /images/* (/images/default.jpg o quello che vuoi) viene restituito il 404 se il file non esiste, il default.jpg se non è autenticato, e il file legittimo se è autenticato.codice://IMPORTANTE: se usi la session devi far derivare la tua classe da IRequiresSessionState public class NoLeechImageHandler : IHttpHandler, IRequiresSessionState { public void ProcessRequest(System.Web.HttpContext ctx) { HttpRequest req = ctx.Request; string serverPath = ctx.Server.MapPath(req.FilePath); //se il file non esiste if (!File.Exists(serverPath)) { ctx.Response.StatusDescription = "Image not found"; ctx.Response.StatusCode = 404; return; } //controllo che nella sessione ci sia una autenticazine. //Potreesti farlo anche con il tuo sistema di autenticazione Forms ad esempio string path = (ctx.Session["Auth"] != null && (bool)ctx.Session["Auth"]) ? serverPath : Path.Combine(ctx.Server.MapPath("~/images"), "default.jpg"); ctx.Response.ContentType = "image/jpg"; ctx.Response.Clear(); ctx.Response.BufferOutput = true; MemoryStream m = new MemoryStream(); Image i = Image.FromFile(path); i.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg); ctx.Response.BinaryWrite(m.ToArray()); } public bool IsReusable { get { return true; } } }
da modificare eventualmente il tipo di autenticazione.