Jak mogę programowo odczytywać typy MIME IIS? Chciałbym ich użyć, gdy przesyłam dane do moich klientów using WCF.Jak mogę zapytać IIS o odwzorowania typów MIME?
Wszelkie wskazówki lub API byłoby mile widziane
Jak mogę programowo odczytywać typy MIME IIS? Chciałbym ich użyć, gdy przesyłam dane do moich klientów using WCF.Jak mogę zapytać IIS o odwzorowania typów MIME?
Wszelkie wskazówki lub API byłoby mile widziane
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?
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ć.
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
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
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
nie wiem, dlaczego to nie jest akceptowana odpowiedź. czy to wymaga praw administratora? –
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
+1 dla grozy! Dziękuję Ci! – LamonteCristo
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
@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