回答
MIME類型在註冊表中「HKEY_CLASSES_ROOT \啞劇\數據庫\內容類型」定義。
您是否正在尋找IIS中定義的特定網站的MIME類型?
我正在做的假設,這是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.dll
在c:\windows\system32\inetsrv
。
您的代碼也需要管理員權限才能做到這一點。
作爲替代讀取註冊表,或在config目錄降低安全性,有內HTML Agility Pack
警告一句話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
如果使用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
不知道爲什麼這不是被接受的答案。那麼,這是否需要管理員權限..? – 2016-12-13 07:35:32
它不需要管理員權限。當最初詢問這個問題時,庫函數不存在,因此OP在當時選擇了最佳答案。我一直使用新的方法,它對我很好。 – dana 2016-12-13 13:54:03
- 1. 如何編輯Chrome MIME類型映射?
- 2. 如何將原生查詢映射到一個模型類?
- 3. ASP.net 3.5 Mime映射
- 4. 如何檢查文件的MIME類型
- 5. 模型映射器 - 如何映射不兼容類型
- 6. 將特定文件映射到Cherokee中的特定MIME類型
- 7. 訪問Apache的Mime類型到擴展映射
- 8. 查詢未映射的類成員
- 9. 的Compojure:如何映射查詢參數
- 10. 如何映射泛型類的屬性?
- 11. 永久添加一個MIME類型IIS
- 12. IIS 7中沒有MIME類型選項
- 13. Sharepoint 2007忽略IIS MIME類型
- 14. 需要在web.config中註冊一些MIME類型IIS註冊的MIME類型
- 15. 如何在NHibernate映射類中查找未映射的屬性?
- 16. 如何使IIS以正確的MIME類型提供樣式表?
- 17. 類型''未映射
- 18. 如何查詢每種類型的表映射的一個級別?
- 19. 映射到Java數據類型的嵌套查詢結果
- 20. 使用映射數據類型的Hive查詢失敗
- 21. nHibernate命名查詢將數據映射到類映射
- 22. 爲什麼映射到提升查詢中的列表失敗,「Slick不知道如何映射給定類型」?
- 23. Doctrine2 - 繼承映射,查詢子類
- 24. Firebase查詢哈希映射到類
- 25. 如何映射查詢使用Ebean
- 26. 如何映射然後查詢上elasticsearch
- 27. PowerShell的檢查MIME在IIS
- 28. Automapper映射類型亞型
- 29. JPA:如何映射SQL Server uniqueidentifier類型
- 30. 如何映射嵌套類型
+1,迷死人!謝謝! – LamonteCristo 2010-10-15 00:56:16
我終於實現了這一點,似乎我需要給予'C:\ Windows \ System32 \ inetsrv'的IUSR訪問權限。從我讀到的這可以顯着降低系統安全性。你怎麼看? – LamonteCristo 2011-04-29 04:18:55
@maker - 查看我答案的最後一句*「您的代碼也需要管理員權限才能做到這一點。」*。您是正確的,允許網站的匿名用戶帳戶具有提升的權限不是一個好主意。我通過在單獨的進程(Windows服務託管遠程或WCF應用程序)中對特權操作進行沙箱處理來解決此問題,並僅公開執行手頭工作所需的特定功能。 – Kev 2011-04-29 20:46:39