web-dev-qa-db-fra.com

Comment compresser un résultat Json d'ASP.NET MVC avec IIS 7.5

J'ai du mal à faire IIS 7 compresser correctement un résultat Json d'ASP.NET MVC. J'ai activé la compression statique et dynamique dans IIS. Je peux vérifier avec Fiddler que le texte normal/html et des enregistrements similaires sont compressés. En affichant la demande, l'en-tête gzip de codage accepté est présent. La réponse a le type MIME "application/json", mais n'est pas compressée.

J'ai identifié que le problème semble être lié au MimeType. Lorsque j'inclus mimeType="*/*", Je peux voir que la réponse est correctement compressée. Comment puis-je obtenir IIS pour compresser SANS utiliser un mimeType générique? Je suppose que ce problème a quelque chose à voir avec la façon dont ASP.NET MVC génère des en-têtes de type de contenu.

L'utilisation du processeur est bien en dessous du seuil de limitation dynamique. Lorsque j'examine les journaux de trace d'IIS, je peux voir qu'il ne parvient pas à se compresser car il n'a pas trouvé de type MIME correspondant.

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForProxies="false">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="application/json" enabled="true" />
    </staticTypes>
</httpCompression>
56
Gareth Saul

Assurez-vous que votre % WinDir%\System32\inetsrv\config\applicationHost.config contient ces éléments:

<system.webServer>
    <urlCompression doDynamicCompression="true" />
    <httpCompression>
      <dynamicTypes>
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/json; charset=utf-8" enabled="true" />       
      </dynamicTypes>
    </httpCompression>
</system.webServer>

Depuis le lien de @AtanasKorchev.

Comme @simon_weaver l'a dit dans les commentaires, vous pouvez éditer le mauvais fichier avec un éditeur 32 bits sur un Windows 64 bits, utilisez notepad.exe pour vous assurer que ce fichier est bien modifié.

59
deerchao

J'ai utilisé avec succès l'approche mise en évidence ici .

22
Atanas Korchev

tilisez ce guide

Aucune de ces réponses n'a fonctionné pour moi. J'ai pris note de l'application /json; charset = utf-8 de type mime cependant.

14
Ryan Kirkman

Je recommande cette approche
Créez la classe CompressAttribute et définissez l'action cible.

6
takepara