2008-10-06 8 views
11

मैं कोड-बैक फ़ाइल से आईआईएस एएसपी.NET वेब-सर्वर पर दिए गए फ़ाइल एक्सटेंशन के लिए माइम-प्रकार खोजना चाहता हूं।एएसपी.NET/IIS6: सर्वर के माइम मानचित्र को कैसे खोजें?

मैं उसी सूची को खोजना चाहता हूं जो फ़ाइल की सेवा करते समय सर्वर स्वयं ही उपयोग करता है। इसका मतलब यह है कि किसी भी माइम प्रकार का वेब-सर्वर व्यवस्थापक माइम मानचित्र में जोड़ा गया है।

मैं आँख बंद करके

HKEY_CLASSES_ROOT\MIME\Database\Content Type 

इस्तेमाल कर सकते हैं लेकिन यह है कि एक ही सूची होने के रूप में दर्ज नहीं किया गया है IIS उपयोग करता है, और न ही जहां माइम मानचित्र संग्रहीत किया जाता है यह प्रलेखित है।

मैं आँख बंद करके FindMimeFromData कह सकते हैं, लेकिन यह है कि एक ही सूची होने के रूप में दर्ज नहीं किया गया है का उपयोग करता है IIS, और न ही मैं गारंटी ले सकते हैं कि आईआईएस माइम मानचित्र भी उस कॉल से लौटा दी जाएगी।

उत्तर

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 टैब के अंतर्गत Active DS IIS Namespace Provider को System.DirectoryServices के लिए एक संदर्भ और कोई संदर्भ जोड़ें। एक्सटेंशन को अग्रणी बिंदु होना चाहिए, यानी .flv

+0

ध्यान दें कि यह कोड IIS 7.5 में कार्य नहीं करता है, कम से कम डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करते समय नहीं। आईआईएस 6.0 में ठीक काम करता है। –

+0

@ ब्लिंकी - ओपी ने आईआईएस 6 (शीर्षक देखें) के बारे में पूछा और मैंने कोई सुझाव नहीं दिया कि यह आईआईएस 7 पर काम करेगा। आईआईएस 7! = आईआईएस 6, वे दो अलग-अलग वेब सर्वर हैं। यह काम कर सकता है अगर आईआईएस 6 पिछड़ा संगतता बिट्स स्थापित हैं। लेकिन अगर आप थे IIS7 पर ऐसा नहीं करेंगे, तो आप प्रबंधित API का उपयोग करके ' 'सेटिंग खोजेंगे: http://www.iis.net/ConfigReference/system.webServer/staticContent/mimeMap – Kev

1

आईआईएस अपने डेटाबेस में एमआईएमई जानकारी संग्रहीत करता है। इंटरनेट पर "माइमेमैप आईआईएस" के लिए खोज करने से यह पता चलता है कि इसे कैसे पढ़ा जाए या इसे बदल दें। उदाहरण के लिए देखें C# - How to display MimeMap entries to the console from an instance of IIS.

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"; 
+4

यह आईआईएस एक्सप्रेस के साथ काम करने के लिए प्रतीत नहीं होता है - आपको "System.Runtime.InteropServices.COMException (0x80070005) मिलेगा: एक्सेस अस्वीकार कर दी गई है।" प्रविष्टि तक पहुंचने पर। प्रॉपर्टीज ["माइमेमैप"]। –

संबंधित मुद्दे