2010-03-13 26 views
1

Je n'ai jamais utilisé de gestionnaires HTTP auparavant, et j'en ai un qui fonctionne, mais je ne suis pas sûr de l'utiliser correctement. J'ai généré une chaîne qui sera enregistrée en tant que fichier CSV. Lorsque l'utilisateur clique sur un bouton, je souhaite que la boîte download dialog s'ouvre afin que l'utilisateur puisse enregistrer le fichier. Ce que j'ai fonctionne, mais je continue à lire sur la modification du fichier web.config et je n'ai pas eu à le faire.Est-ce que j'utilise des gestionnaires de la mauvaise façon?

Mon Handler:

private string _data; 
private string _title = "temp"; 


public void AddData(string data) 
{ 
    _data = data; 
} 



public bool IsReusable 
{ 
    get { return false; } 
} 

public void ProcessRequest(HttpContext context) 
{ 

    context.Response.ContentType = "text/csv"; 
    context.Response.AddHeader("content-disposition","filename=" + _title + ".csv"); 
    context.Response.Write(_data); 
    context.Response.Flush(); 
    context.Response.Close(); 

} 

Et cela vient de la page qui permet à l'utilisateur de télécharger: (sur le bouton clic)

string dataToConvert = "MYCSVDATA...."; 

csvHandler handler = new csvHandler(); 
handler.AddData(dataToConvert); 

handler.ProcessRequest(this.Context); 

Cela fonctionne très bien, mais pas d'exemples que j'ai vu jamais instancier le gestionnaire et semble toujours modifier le web.config. Est-ce que je fais quelque chose de mal?

Merci

Répondre

4

Il me semble que ce n'est pas vraiment en utilisant le fait que c'est un gestionnaire du tout. Quel est l'avantage de créer une classe séparée pour cette implémentation d'une interface que vous n'utilisez pas vraiment, plutôt que de placer le code dans votre classe de page existante? Vous ne faites que des choses à la réponse - alors pourquoi ne pas le faire dans la page?

L'approche typique de la modification web.config est parce que vous voulez que le gestionnaire pour gérer réellement la demande - alors que dans votre cas la page reçoit la demande, et juste demander un objet qui se pour implémenter l'interface de gestionnaire de Vider les données dans la réponse.

En particulier, ce gestionnaire serait-il utilisable comme gestionnaire autonome pour une réponse normale? On dirait que ça va seulement faire quelque chose d'utile quand vous avez appelé AddData là-dessus ... si vous l'avez fait l'enregistrer dans web.config, il répondrait simplement avec un fichier csv vide (ou peut-être une exception), à droite ? Si tel est le cas, je ne pense vraiment pas qu'il devrait implémenter le IHttpHandler en premier lieu - il induira en erreur d'autres développeurs qui le regarderont plus tard.

+0

Merci pour la réponse. Je l'avais à l'origine dans la page de code, mais j'ai lu un post de forum où quelqu'un a dit qu'il serait plus efficace d'utiliser un gestionnaire pour permettre aux utilisateurs de télécharger. Je suppose que leur scénario a dû être différent (c'est-à-dire faire plus que simplement utiliser la propriété de réponse). – XSL