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
.
IIS almacena la información MIME en su propia base de datos. La búsqueda de "IIS de MimeMap" en Internet revelará cómo leerlo o incluso cambiarlo. Ver por ejemplo C # - Cómo mostrar las entradas de MimeMap a la consola desde una instancia de IIS.