2009-12-30 4 views
2

Firefox ne gère pas correctement le contenu envoyé via mon gestionnaire HTTP .NET; il semble ne pas honorer l'en-tête de type de contenu. Au contraire, il voit le contenu comme HTML. L'URL mappée à la requête a même une extension .csv. Internet Explorer et Chrome font la bonne chose. Le problème se produit à la fois pour un gestionnaire "text/css" et un gestionnaire "application/pdf".Firefox ne gère pas correctement le type de contenu lors de l'utilisation de IHttpHandler

est ici un fragment de ma méthode de gestionnaire HTTP ProcessRequest:

public void ProcessRequest(HttpContext context) 
{ 
    // ... 

    // Set the output headers 
    context.Response.ClearHeaders(); 
    context.Response.ContentType = "text/csv"; 
    context.Response.AddHeader(
     "Content-Disposition", "attachment; filename=foo.csv"); 

    // Code that writes to the output stream 
    // ... 

    context.Response.End(); 
} 

Ce qui manque dans ma réponse qui permettrait à Firefox de reconnaître le type de contenu comme prévu?

Edit 1:

Lorsque vous utilisez l'extension Firefox en-têtes HTTP en direct, j'ai vu, je revenir les en-têtes suivants. Il semble que mon en-tête ContentType soit perdu.

HTTP/1.x 200 OK 
Server: ASP.NET Development Server/9.0.0.0 
Date: Thu, 31 Dec 2009 02:34:09 GMT 
X-AspNet-Version: 2.0.50727 
Content-Disposition: attachment;filename="foo.csv" 
Cache-Control: private 
Content-Type: text/html 
Content-Length: 66682 
Connection: Close 

Edit 2:

Trouvé la question. Dans mon gestionnaire, j'utilisais context.Server.Execute pour générer du HTML à partir d'un modèle ASPX, puis le traiter en HTML. En d'autres termes, je n'utilisais pas context. Server.Execute pour sortir directement à la réponse. Malgré cela, l'exécution de cette méthode modifie les en-têtes de réponse du contexte actuel. Donc, c'était en train de défaire les en-têtes que j'avais fixés. Déplacer le code qui modifie les en-têtes après context.Server.Execute a résolu le problème.

La raison pour laquelle cela ne concerne que Firefox est que les autres navigateurs utilisent l'extension de fichier plutôt que le type de contenu. Firefox fait la bonne chose.

Répondre

2

Cela semble étrange. Je voudrais installer le module complémentaire Live HTTP Headers pour Firefox juste pour confirmer que Firefox voit en effet ces deux en-têtes comme vous vous en doutez. RFC 2616 semble également suggérer placing quotes round the filename, de sorte que vous pouvez essayer aussi.

+0

Excellent conseil. J'ai installé Live HTTP Headers et j'ai vu que je ne récupérais pas le bon en-tête de type de contenu. Je vais bientôt ajouter les en-têtes que je reçois dans la réponse. – Jacob

+0

Cool. Désolé, je ne peux pas aider plus loin car je ne sais pas sur le serveur de développement ASP.NET et pourquoi ou où les choses pourraient être remplacées. Peut-être que lorsqu'il est déployé sur IIS ou un autre serveur plutôt que sur un serveur de dev, les choses vont fonctionner correctement? –

+0

Malheureusement, la même chose se passe également dans IIS. – Jacob

Questions connexes