>L'applicazione è in .net 3.5, ed il server è nostro, lo gestisco
>io direttamente quindi non avrei nessun problema ad apportare modifiche.
perfetto, hai qualche tipo di autenticazione impostata?
Casomai dai un'occhiata qui:
http://msdn.microsoft.com/en-us/library/eeyk640h(v=vs.100).aspx
http://www.codeproject.com/Articles/98950/ASP-NET-authentication-and-authorization
Con questa configurazione, se la cartella è una sottocartella (a livello url) della tua app, dovresti riuscire già avere di default il blocco alle chiamate per un utente non autenticato.
>Potresti essere più preciso?
Per quanto riguarda l'handler, è semplice:
Tasto Dx->Add new Item->Generic Handler (file .ashx)
Poi dentro lì, vai a decidere cosa ti arriva come richiesta di download, questo dipende da come crei i link sulle pagine.
Io ad esempio chiamavo tutto tramite un ID che poi mi mappava su una tabella etc...copi dentro questo codice:
<%@ WebHandler Language="C#" Class="Download" %>
using System;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.SessionState;
public class Download : IHttpHandler, IRequiresSessionState
{
public bool IsReusable {
get {
return false;
}
}
public void ProcessRequest(HttpContext context)
{
string idString = context.Request.QueryString["id"];
//--- safety code
if (string.IsNullOrEmpty(idString))
return;
byte[] bytes = ....leggi i bytes...;
//--- hai letto uno stream di byte in memoria
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + nome);
context.Response.AddHeader("Content-Length", bytes.Length.ToString());
context.Response.OutputStream.Write(bytes,0,bytes.Length);
}
}
Oppure se il file è direttamente accessibile puoi usare anche il metodo diretto, senza caricare in memoria i bytes del file:
context.Response.WriteFile(filePath);
Infine, da notare IRequiresSessionState che ti serve per poter avere accesso alla sessione corrente, quindi verificare le credenziali d'accesso...cmq il codice devi adattarlo tu, questo è solo uno spunto.
>Sempre se la modifica in IIS non sia più semplice...
oddio non me ne intendo tanto di IIS, quindi potrebbe essere semplice come cosa...solitamente uso l'autenticazione di .net, quindi vado a farmi quello che mi serve.
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo