2010-10-14 22 views

Odpowiedz

2

typów MIME zarejestrowanych w systemie są zdefiniowane w rejestrze pod "HKEY_CLASSES_ROOT \ Mime \ database \ Content Type".

Szukasz typów mime dla określonej strony internetowej zdefiniowanej w IIS?

12

robię założenie to jest IIS7 tylko i używasz C# 3.0 lub nowszej:

using Microsoft.Web.Administration; 
.... 
using(ServerManager serverManager = new ServerManager()) 
{ 
    // If interested in global mimeMap: 
    var config = serverManager.GetApplicationHostConfiguration(); 

    // Use if interested in just a particular site's mimeMap: 
    // var config = serverManager.GetWebConfiguration("Default Web Site"); 

    var staticContent = config.GetSection("system.webServer/staticContent"); 
    var mimeMap = staticContent.GetCollection(); 

    // Print all mime types 
    foreach (var mimeType in mimeMap) 
    { 
    Console.WriteLine(String.Format("{0} = {1}", mimeType["fileExtension"], 
     mimeType["mimeType"])); 
    } 

    // Find a mime type based on file extension 
    var mt = mimeMap.Where(
     a => (string) a.Attributes["fileExtension"].Value == ".pdf" 
    ).FirstOrDefault(); 

    if (mt != null) 
    { 
    Console.WriteLine("Mime type for .pdf is: " + mt["mimeType"]); 
    } 
} 

Trzeba odwołać Microsoft.Web.Administration.dll w c:\windows\system32\inetsrv.

Twój kod również potrzebuje uprawnień administratora, aby móc to zrobić.

+0

+1 dla grozy! Dziękuję Ci! – LamonteCristo

+0

W końcu udało mi się to wdrożyć i wydaje mi się, że muszę dać IUSR dostęp do 'C: \ Windows \ System32 \ inetsrv'. Z tego co przeczytałem, może znacznie zmniejszyć bezpieczeństwo systemu. Jakie są Twoje myśli? – LamonteCristo

+0

@maker - zobacz ostatnie zdanie z mojej odpowiedzi * "Twój kod również potrzebuje uprawnień administratora, aby móc to zrobić również." *. Masz rację, że zezwalanie anonimowemu kontu użytkownika witryny na podwyższone uprawnienia nie jest dobrym pomysłem. Pracuję nad tym przez piaskowanie wysoce uprzywilejowanych operacji w oddzielnym procesie (usługa Windows Hosted Remoting lub aplikacja WCF) i eksponuje tylko specyficzne funkcje wymagane do wykonania pracy pod ręką. – Kev

0

Jako alternatywę do czytania rejestru lub obniżenie bezpieczeństwa w katalogu config, jest wstępnie wypełnione bazy danych MIME obrębie HTML Agility Pack

+0

Słowo ostrzeżenia HtmlAgilityPack 1.4.0.0 używa tylko klucza rejestru HKEY_CLASSES_ROOT. Więc potrzebujesz dostępu do rejestru i typu pliku, który chcesz zarejestrować na serwerze. Ten artykuł na blogu jest całkiem niezły http://codelog.climens.net/2009/10/28/getting-mime-type-in-net-from-file-extension/ – keza

5

Jeśli środowisku ASP.NET 4.5 lub wyższy, można użyć System.Web.MimeMapping.GetMimeMapping następująco :

void Page_Init() 
{ 
    string[] extensions = new string[] 
    { 
     ".pdf", 
     ".xls", 
     ".xlsx", 
     ".ppt", 
     ".pptx", 
     ".mp3", 
     ".ogg", 
     ".svg", 
     ".pdf", 
     ".png", 
    }; 

    foreach (string extension in extensions) 
    { 
     string mimeType = MimeMapping.GetMimeMapping(extension); 
     Response.Write(String.Format("{0} => {1}<br />", 
       extension, 
       mimeType 
      )); 
    } 
} 

Wynik:

.pdf => application/pdf 
.xls => application/vnd.ms-excel 
.xlsx => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
.ppt => application/vnd.ms-powerpoint 
.pptx => application/vnd.openxmlformats-officedocument.presentationml.presentation 
.mp3 => audio/mpeg 
.ogg => video/ogg 
.svg => image/svg+xml 
.pdf => application/pdf 
.png => image/png 
+0

nie wiem, dlaczego to nie jest akceptowana odpowiedź. czy to wymaga praw administratora? –

+1

Nie wymaga uprawnień administratora. Kiedy pierwotnie zadano to pytanie, funkcja biblioteczna nie istniała, więc OP wybrał najlepszą odpowiedź w tym czasie. Używam nowszej metody przez cały czas i działa ona doskonale dla mnie. – dana

Powiązane problemy