【发布时间】:2011-04-25 16:13:14
【问题描述】:
如何以编程方式读取 IIS 的 MIME 类型?当我将数据流式传输到我的客户using WCF 时,我想使用它们。
任何提示或 API 将不胜感激
【问题讨论】:
标签: iis iis-7 mime mime-types
如何以编程方式读取 IIS 的 MIME 类型?当我将数据流式传输到我的客户using WCF 时,我想使用它们。
任何提示或 API 将不胜感激
【问题讨论】:
标签: iis iis-7 mime mime-types
我假设这只是 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"]);
}
}
您需要在c:\windows\system32\inetsrv 中引用Microsoft.Web.Administration.dll。
您的代码也需要管理员权限才能执行此操作。
【讨论】:
C:\Windows\System32\inetsrv。根据我的阅读,这会显着降低系统安全性。你有什么想法?
如果使用 ASP.Net 4.5 或更高版本,您可以使用System.Web.MimeMapping.GetMimeMapping,如下所示:
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
【讨论】:
注册到系统的 Mime 类型在注册表中的“HKEY_CLASSES_ROOT\Mime\Database\Content Type”下定义。
您是否正在寻找 IIS 中定义的特定网站的 mime 类型?
【讨论】:
作为读取注册表或降低配置目录安全性的替代方法,HTML Agility Pack 中有一个预先填充的 MIME 数据库
【讨论】: