type tipo para net configurar aspx asp asignacion asp.net iis mime mime-types

asp.net - para - tipo mime asp net



ASP.NET/IIS6: ¿Cómo buscar en el mapa mime del servidor? (3)

Quiero encontrar el tipo mime para una extensión de archivo dada en un servidor web IIS ASP.NET del archivo de código subyacente.

Quiero buscar en la misma lista que usa el servidor al servir un archivo. Esto significa que se incluirá cualquier tipo de mimo que un administrador de servidor web haya agregado al Mime Map .

Podría usar a ciegas

HKEY_CLASSES_ROOT/MIME/Database/Content Type

pero eso no está documentado como la misma lista que IIS usa, ni está documentado donde se almacena el Mime Map .

Podría llamar ciegamente a FindMimeFromData , pero eso no está documentado como la misma lista que IIS usa, ni puedo garantizar que el IIS Mime Map también se devolverá desde esa llamada.


Aquí hay otra implementación similar, pero no requiere agregar la referencia COM, sino que recupera las propiedades a través de la reflexión y las almacena en NameValueCollection para una búsqueda fácil:

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

Puede guardar en caché muy fácilmente esa tabla de búsqueda y luego hacer referencia a ella más adelante:

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


Aquí hay uno que hice anteriormente:

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

Agregue una referencia a System.DirectoryServices y una referencia a Active DS IIS Namespace Provider en la pestaña COM. La extensión necesita tener el punto .flv , es decir, .flv .