Wie kann ich IIS-MIME-Typen programmatisch lesen? Ich möchte sie verwenden, wenn ich Daten an meine Kunden using WCF streame.Wie kann ich IIS nach MIME-Typzuordnungen abfragen?
Irgendwelche Tipps oder API würde
Wie kann ich IIS-MIME-Typen programmatisch lesen? Ich möchte sie verwenden, wenn ich Daten an meine Kunden using WCF streame.Wie kann ich IIS nach MIME-Typzuordnungen abfragen?
Irgendwelche Tipps oder API würde
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?
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.
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
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
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
weiß nicht, warum dies nicht die akzeptierte Antwort ist. Nun, erfordert dies Administratorrechte ..? –
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
+1 für awesomeness! Vielen Dank! – LamonteCristo
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
@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