2010-10-14 49 views

回答

2

MIME類型在註冊表中「HKEY_CLASSES_ROOT \啞劇\數據庫\內容類型」定義。

您是否正在尋找IIS中定義的特定網站的MIME類型?

12

我正在做的假設,這是IIS7只有你正在使用C#3.0或更高版本:

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"]); 
    } 
} 

您需要引用Microsoft.Web.Administration.dllc:\windows\system32\inetsrv

您的代碼也需要管理員權限才能做到這一點。

+0

+1,迷死人!謝謝! – LamonteCristo 2010-10-15 00:56:16

+0

我終於實現了這一點,似乎我需要給予'C:\ Windows \ System32 \ inetsrv'的IUSR訪問權限。從我讀到的這可以顯着降低系統安全性。你怎麼看? – LamonteCristo 2011-04-29 04:18:55

+0

@maker - 查看我答案的最後一句*「您的代碼也需要管理員權限才能做到這一點。」*。您是正確的,允許網站的匿名用戶帳戶具有提升的權限不是一個好主意。我通過在單獨的進程(Windows服務託管遠程或WCF應用程序)中對特權操作進行沙箱處理來解決此問題,並僅公開執行手頭工作所需的特定功能。 – Kev 2011-04-29 20:46:39

0

作爲替代讀取註冊表,或在config目錄降低安全性,有內HTML Agility Pack

+0

警告一句話HtmlAgilityPack 1.4.0.0只是使用註冊表項HKEY_CLASSES_ROOT。所以你需要訪問註冊表和文件類型以在服務器上註冊。這篇博客文章相當不錯http://codelog.climens.net/2009/10/28/getting-mime-type-in​​-net-from-file-extension/ – keza 2012-04-13 02:47:55

5

如果使用ASP.Net 4.5或更高版本,可以使用System.Web.MimeMapping.GetMimeMapping如下預填充的MIME數據庫:

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 
      )); 
    } 
} 

結果:

.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

不知道爲什麼這不是被接受的答案。那麼,這是否需要管理員權限..? – 2016-12-13 07:35:32

+1

它不需要管理員權限。當最初詢問這個問題時,庫函數不存在,因此OP在當時選擇了最佳答案。我一直使用新的方法,它對我很好。 – dana 2016-12-13 13:54:03