2010-06-21 13 views
2

J'écris une méthode d'assistance en C#/ASP.NET qui transmet un fichier au navigateur, et je voudrais être en mesure de détecter si un contenu a été écrit dans le navigateur avant d'effacer les en-têtes/contenus de réponse et envoi de fichiers octets. Si une page qui appelle ma méthode d'assistance n'est pas configurée correctement, il semble qu'il soit possible (probablement même?) Que les en-têtes de page et le contenu "normaux" soient envoyés au navigateur avant que j'essaie d'effacer réponse entière et commencer frais avec des données de fichier. Alors, est-il possible de dire si des données ont déjà été envoyées?Comment puis-je savoir si des données de réponse ont déjà été envoyées au client dans ASP.NET?

Fondamentalement, je suis à la recherche de quelque chose comme le BytesSent de propriété faux dans cet exemple:

if (response.BytesSent == 0) 
{ 
    response.ClearHeaders(); 
    response.ClearContent(); 
    response.Clear(); 

    response.ContentType = "application/octet-stream"; 
    response.AppendHeader("Content-Disposition", "attachment; filename=" + filename); 
    response.AppendHeader("Content-Length", new FileInfo(path).Length.ToString()); 

    // 
    // etc. (stream the file) 
    // 
} 
else 
{ 
    // throw an exception (or handle the problem in some other way) 
} 

Répondre

0

Je ne sais pas si la propriété que vous cherchez existe, mais en général, ce n'est pas comment vous allez à propos de ça. Fondamentalement, ce type d'appel n'est pas celui que vous voulez faire à partir d'une "Page", si par là vous voulez dire une instance de System.Web.UI.Page (que les fichiers .aspx sont généralement). Au lieu de cela, utilisez un gestionnaire (.ashx) pour ce genre de travail. Le gestionnaire est une implémentation de System.Web.IHttpHandler, et vous devriez appeler cette méthode à partir de la méthode ProcessRequest() (ou simplement mettre votre logique dans ProcessRequest()).