2010-10-14 12 views

Antwort

2

Mime-Typen auf das System werden in der Registrierung unter "HKEY_CLASSES_ROOT \ Mime \ Database \ Content Type" definiert registriert geschätzt.

Suchen Sie Mime-Typen für eine bestimmte Website, die in IIS definiert ist?

12

Ich mache die Annahme, das ist IIS7 nur und Sie sind mit C# 3.0 oder höher:

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"]); 
    } 
} 

Sie müssen die Microsoft.Web.Administration.dll in c:\windows\system32\inetsrv verweisen.

Ihr Code benötigt auch Administratorrechte, um dies auch tun zu können.

+0

+1 für awesomeness! Vielen Dank! – LamonteCristo

+0

Ich bin schließlich dazu gekommen, dies zu implementieren und es scheint, dass ich IUSR Zugriff auf "C: \ Windows \ System32 \ inetsrv" geben muss. Nach dem, was ich gelesen habe, kann dies die Systemsicherheit erheblich reduzieren. Was sind deine Gedanken? – LamonteCristo

+0

@maker - siehe den letzten Satz meiner Antwort * "Ihr Code benötigt auch Administratorrechte, um dies auch tun zu können." *. Sie haben Recht, dass es nicht empfehlenswert ist, dem anonymen Benutzerkonto einer Site erhöhte Rechte zu gewähren. Ich umgehe das, indem ich hochprivilegierte Operationen in einem separaten Prozess (gehosteter Remoting oder WCF-Anwendung von Windows-Diensten) per Sandboxing abdecke und nur bestimmte Funktionen freigebe, die zur Ausführung dieser Aufgabe erforderlich sind. – Kev

0

Als Alternative zu der Registrierung zu lesen oder auf das Verzeichnis config Senkung Sicherheit gibt es eine vorausgefüllte MIME-Datenbank innerhalb der HTML Agility Pack

+0

Ein Wort der Warnung HtmlAgilityPack 1.4.0.0 verwendet nur den Registrierungsschlüssel HKEY_CLASSES_ROOT. Sie benötigen also Zugriff auf die Registrierung und den Dateityp, der auf dem Server registriert werden soll. Dieser Blogartikel ist ziemlich gut http://codelog.climens.net/2009/10/28/getting-mime-type-in-net-from-file-extension/ – keza

5

Bei der Verwendung von ASP.Net 4.5 oder höher, Sie System.Web.MimeMapping.GetMimeMapping verwenden können wie folgt :

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 
      )); 
    } 
} 

Ergebnis:

.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

weiß nicht, warum dies nicht die akzeptierte Antwort ist. Nun, erfordert dies Administratorrechte ..? –

+1

Es erfordert keine Administratorrechte. Wenn diese Frage ursprünglich gestellt wurde, existierte die Bibliotheksfunktion nicht, so dass das OP zu der Zeit die beste Antwort auswählte. Ich benutze die neuere Methode die ganze Zeit und es funktioniert gut für mich. – dana