Frage

Ich mag den MIME-Typen für eine bestimmte Dateierweiterung auf einem IIS ASP.NET Web-Server von der Code-Behind-Datei finden.

ich möchte die gleiche Liste suchen, die der Server selbst verwendet, wenn eine Datei serviert. Dies bedeutet, dass jeder MIME-Typen ein Web-Server-Administrator auf die hinzugefügt Mime Map wird aufgenommen werden.

i blind verwenden könnte

HKEY_CLASSES_ROOT\MIME\Database\Content Type

, aber das wird als die gleiche Liste II verwendet nicht dokumentiert, noch ist es dokumentiert, wo die Mime Karte gespeichert wird.

ich könnte blind nennen FindMimeFromData , aber das ist nicht dokumentiert, wie die gleiche Liste IIS verwendet wird, noch kann ich garantieren, dass die IIS Mime Karte wird auch von diesem Aufruf zurückgegeben werden.

War es hilfreich?

Lösung

Hier ist ein Ich habe früher:

public static string GetMimeTypeFromExtension(string extension)
{
    using (DirectoryEntry mimeMap = 
           new DirectoryEntry("IIS://Localhost/MimeMap"))
    {
        PropertyValueCollection propValues = mimeMap.Properties["MimeMap"];

        foreach (object value in propValues)
        {
            IISOle.IISMimeType mimeType = (IISOle.IISMimeType)value;

            if (extension == mimeType.Extension)
            {
                return mimeType.MimeType;
            }
        }

        return null;

    }
}

Fügen Sie einen Verweis auf System.DirectoryServices und eine Referenz unter der Registerkarte COM auf Active DS IIS Namespace Provider. Die Verlängerung muss den führenden Punkt haben, das heißt .flv.

Andere Tipps

Hier ist eine weitere ähnliche Umsetzung, aber erfordert nicht die COM-Verweis hinzugefügt - es die Eigenschaften durch Reflexion ruft statt und speichert sie in einem Namevaluecollection für eine einfache Lookup:

using System.Collections.Specialized; //NameValueCollection
using System.DirectoryServices; //DirectoryEntry, PropertyValueCollection
using System.Reflection; //BindingFlags

NameValueCollection map = new NameValueCollection();
using (DirectoryEntry entry = new DirectoryEntry("IIS://localhost/MimeMap"))
{
  PropertyValueCollection properties = entry.Properties["MimeMap"];
  Type t = properties[0].GetType();

  foreach (object property in properties)
  {
    BindingFlags f = BindingFlags.GetProperty;
    string ext = t.InvokeMember("Extension", f, null, property, null) as String;
    string mime = t.InvokeMember("MimeType", f, null, property, null) as String;
    map.Add(ext, mime);
  }
}

Sie können sehr leicht, dass die Lookup-Tabellen-Cache, und es dann später referenzieren:

Response.ContentType = map[ext] ?? "binary/octet-stream";

IIS speichert die MIME-Informationen in seiner eigenen Datenbank. Die Suche nach „MimeMap IIS“ im Internet wird zeigen, wie es zu lesen oder sogar verändern. Siehe zum Beispiel C # - Wie MimeMap Einträge auf der Konsole angezeigt werden von eine Instanz von IIS.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top