当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET/IIS6:如何搜索服务器的mime映射?

如何解决《ASP.NET/IIS6:如何搜索服务器的mime映射?》经验,为你挑选了2个好方法。

我想从代码隐藏文件中找到IIS ASP.NET Web服务器上给定文件扩展名的mime类型.

我想搜索服务器本身在提供文件时使用的相同列表.这意味着将包含Web服务器管理员添加到Mime Map的任何mime类型.

我可以盲目地使用

HKEY_CLASSES_ROOT\MIME\Database\Content Type

但是没有记录为IIS使用的列表,也没有记录存储Mime Map的位置.

我可以盲目地调用FindMimeFromData,但是没有记录为IIS使用的相同列表,也不能保证IIS Mime Map也将从该调用返回.



1> Goyuix..:

这是另一个类似的实现,但不需要添加COM引用 - 它通过反射检索属性,并将它们存储在NameValueCollection中以便于查找:

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

您可以非常轻松地缓存该查找表,然后再引用它:

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


这似乎不适用于IIS Express - 您将获得"System.Runtime.InteropServices.COMException(0x80070005):访问被拒绝." 访问entry.Properties ["MimeMap"]时.

2> Kev..:

这是我之前制作的一个:

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;

    }
}

在COM选项卡下添加对引用System.DirectoryServices和引用Active DS IIS Namespace Provider.扩展需要有前导点,即.flv.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有