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.
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
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? –
Malheureusement, la même chose se passe également dans IIS. – Jacob