ASP.NET/IIS6: كيفية البحث خريطة التمثيل الصامت الخادم؟

StackOverflow https://stackoverflow.com/questions/174888

  •  05-07-2019
  •  | 
  •  

سؤال

وأريد أن العثور على التمثيل الصامت من نوع لملحق ملف معين على خدمة الإنترنت من IIS ASP.NET من ملف التعليمات البرمجية الخلفية.

واريد ان ابحث في القائمة نفسها التي يستخدمها الخادم نفسه عندما تخدم ما يصل الملف. وهذا يعني أن أي نوع من أنواع التمثيل الصامت وأضاف مسؤول خادم الويب لمايم خريطة ستدرج <م>.

وأنا يمكن أن تستخدم على نحو أعمى

HKEY_CLASSES_ROOT\MIME\Database\Content Type

ولكن التي لم يتم توثيقها باعتبارها القائمة نفسها IIS الاستخدامات، كما أنها ليست موثقة حيث <م> مايم خريطة يتم تخزينها.

وأنا يمكن أن نسميه عمياء FindMimeFromData ، ولكن التي لم يتم توثيقها باعتبارها القائمة نفسها IIS الاستخدامات، ولا يمكنني ضمان أن IIS <م> مايم خريطة كما سيتم عاد من تلك الدعوة.

هل كانت مفيدة؟

المحلول

وهنا واحد الذي أدليت به في وقت سابق:

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;

    }
}

وإضافة مرجع إلى System.DirectoryServices وإشارة إلى Active DS IIS Namespace Provider تحت علامة التبويب COM. يحتاج التمديد لديها نقطة الرائدة، أي .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