2010-10-14 13 views

Répondre

2

types Mime enregistrés au système sont définis dans le Registre sous "HKEY_CLASSES_ROOT \ Mime \ Database \ type de contenu".

Recherchez-vous des types MIME pour un site Web particulier défini dans IIS?

12

Je fais l'hypothèse que c'est IIS7 seulement et que vous utilisez C# 3.0 ou version ultérieure:

using Microsoft.Web.Administration; 
.... 
using(ServerManager serverManager = new ServerManager()) 
{ 
    // If interested in global mimeMap: 
    var config = serverManager.GetApplicationHostConfiguration(); 

    // Use if interested in just a particular site's mimeMap: 
    // var config = serverManager.GetWebConfiguration("Default Web Site"); 

    var staticContent = config.GetSection("system.webServer/staticContent"); 
    var mimeMap = staticContent.GetCollection(); 

    // Print all mime types 
    foreach (var mimeType in mimeMap) 
    { 
    Console.WriteLine(String.Format("{0} = {1}", mimeType["fileExtension"], 
     mimeType["mimeType"])); 
    } 

    // Find a mime type based on file extension 
    var mt = mimeMap.Where(
     a => (string) a.Attributes["fileExtension"].Value == ".pdf" 
    ).FirstOrDefault(); 

    if (mt != null) 
    { 
    Console.WriteLine("Mime type for .pdf is: " + mt["mimeType"]); 
    } 
} 

Vous devez faire référence à la Microsoft.Web.Administration.dll dans c:\windows\system32\inetsrv.

Votre code nécessite également des droits d'administrateur pour pouvoir le faire également.

+0

+1 pour génialité! Je vous remercie! – LamonteCristo

+0

J'ai finalement réussi à l'implémenter et il semble que je doive donner un accès IUSR à 'C: \ Windows \ System32 \ inetsrv'. D'après ce que j'ai lu, cela peut réduire considérablement la sécurité du système. Quelles sont vos pensées? – LamonteCristo

+0

@maker - voir la dernière phrase de ma réponse * "Votre code a également besoin de droits d'administrateur pour pouvoir le faire aussi." *. Vous avez raison de dire que permettre au compte d'utilisateur anonyme d'un site d'avoir des privilèges élevés n'est pas une bonne idée. Je contourne cela en mettant en sandbox des opérations hautement privilégiées dans un processus séparé (Windows Service hébergé remoting ou application WCF) et n'expose que les fonctionnalités spécifiques nécessaires pour faire le travail à portée de main. – Kev

0

Comme alternative à la lecture du registre, ou en abaissant la sécurité dans le répertoire de configuration, il y a une base de données MIME prérempli dans le HTML Agility Pack

+0

Un mot d'avertissement HtmlAgilityPack 1.4.0.0 utilise simplement la clé de registre HKEY_CLASSES_ROOT. Vous aurez donc besoin d'accéder au registre et au type de fichier à enregistrer sur le serveur. Cet article de blog est très bon http://codelog.climens.net/2009/10/28/getting-mime-type-in-net-from-file-extension/ – keza

5

Si vous utilisez ASP.Net 4.5 ou supérieur, vous pouvez utiliser System.Web.MimeMapping.GetMimeMapping comme suit :

void Page_Init() 
{ 
    string[] extensions = new string[] 
    { 
     ".pdf", 
     ".xls", 
     ".xlsx", 
     ".ppt", 
     ".pptx", 
     ".mp3", 
     ".ogg", 
     ".svg", 
     ".pdf", 
     ".png", 
    }; 

    foreach (string extension in extensions) 
    { 
     string mimeType = MimeMapping.GetMimeMapping(extension); 
     Response.Write(String.Format("{0} => {1}<br />", 
       extension, 
       mimeType 
      )); 
    } 
} 

Résultat:

.pdf => application/pdf 
.xls => application/vnd.ms-excel 
.xlsx => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
.ppt => application/vnd.ms-powerpoint 
.pptx => application/vnd.openxmlformats-officedocument.presentationml.presentation 
.mp3 => audio/mpeg 
.ogg => video/ogg 
.svg => image/svg+xml 
.pdf => application/pdf 
.png => image/png 
+0

ne sais pas pourquoi ce n'est pas la réponse acceptée. Eh bien, cela nécessite-t-il des droits d'administrateur? –

+1

Il ne nécessite pas de droits d'administrateur. Lorsque cette question a été posée à l'origine, la fonction de bibliothèque n'existait pas, de sorte que l'OP a sélectionné la meilleure réponse à ce moment-là. J'utilise la méthode la plus récente tout le temps et ça marche très bien pour moi. – dana