11

コード ビハインド ファイルから、IIS ASP.NET Web サーバー上の特定のファイル拡張子の MIME タイプを見つけたいと考えています。

ファイルを提供するときにサーバー自体が使用するのと同じリストを検索したい。これは、Web サーバー管理者がMIME マップに追加したすべての MIME タイプが含まれることを意味します。

私は盲目的に使うことができました

HKEY_CLASSES_ROOT\MIME\Database\Content Type

しかし、これは IIS が使用するリストと同じであるとは文書化されておらず、Mime Mapが格納されている場所も文書化されていません。

私はやみくもにFindMimeFromDataを呼び出すことができましたが、IIS が使用するリストと同じであるとは文書化されておらず、IIS Mime Mapがその呼び出しから返されることを保証することもできません。

4

3 に答える 3

12

これは別の同様の実装ですが、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";
于 2010-02-10T22:28:28.390 に答える
10

ここに私が以前に作ったものがあります:

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.

于 2008-10-06T16:17:22.940 に答える
1

IIS は、MIME 情報を独自のデータベースに格納します。インターネットで「MimeMap IIS」を検索すると、その読み方や変更方法が明らかになります。たとえば、C# - IIS のインスタンスから MimeMap エントリをコンソールに表示する方法を参照してください。

于 2008-10-06T16:14:08.673 に答える