質問

iは、分離コードファイルからIIS ASP.NET Webサーバー上の特定のファイル拡張子のMIMEタイプを検索したいです。

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

iは盲目的に使用できます

HKEY_CLASSES_ROOT\MIME\Database\Content Type

しかし、IISが使用しているのと同じリストとして文書化されておらず、 MIMEマップが保存されている場所にも文書化されていません。

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

役に立ちましたか?

解決

これは以前に作成したものです:

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 です。

他のヒント

別の同様の実装を次に示しますが、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は、MIME情報を独自のデータベースに保存します。 " MimeMap IIS"の検索インターネット上でそれを読んだり、変更したりする方法を明らかにします。たとえば、 C#-MimeMapエントリをコンソールに表示する方法を参照してください。 IISのインスタンス。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top