2011-02-23 60 views
4

我有以下部分在我的web.config:如何從web.config中的IIS7閱讀部分W在C#/。NET 4

<system.webServer> 
    <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="0.00:00:30" /> 

     <remove fileExtension=".ogv" /> 
     <mimeMap fileExtension=".ogv" mimeType="video/ogg" /> 

     <remove fileExtension=".webm" /> 
     <mimeMap fileExtension=".webm" mimeType="video/webm" /> 

     <!-- and a bunch more... --> 
    </staticContent> 
    <!-- ... --> 
</system.webServer> 

這裏就是我想要做的僞代碼:

var ext = ".ogg"; 
var staticContentElements = GetWebConfig().GetSection("system.webServer/staticContent").ChildElements; 
var mimeMap = staticContentElements.Where(c => 
        c.GetAttributeValue("fileExtension") != null && 
        c.GetAttributeValue("fileExtension").ToString() == ext 
       ).Single(); 

var mimeType = mimeMap.GetAttributeValue("mimeType").ToString(); 

基本上,我需要尋找一個fileExtension的mimeMaps並得到他們的媒體類型。

回答

1

George Stocker的answer將我引向Google搜索["staticContent" custom configuration section],它將我帶到了一篇名爲Adding Static Content MIME Mappings <mimeMap>的iis.net文章。

文章促使我想出了:

using (var serverManager = new ServerManager()) 
{ 
    var siteName = HostingEnvironment.ApplicationHost.GetSiteName(); 
    var config = serverManager.GetWebConfiguration(siteName); 
    var staticContentSection = config.GetSection("system.webServer/staticContent"); 
    var staticContentCollection = staticContentSection.GetCollection(); 

    var mimeMap = staticContentCollection.Where(c => 
     c.GetAttributeValue("fileExtension") != null && 
     c.GetAttributeValue("fileExtension").ToString() == ext 
    ).Single(); 

    var mimeType = mimeMap.GetAttributeValue("mimeType").ToString(); 
    contentType = mimeType.Split(';')[0]; 
} 

這對我來說完美的作品。我只需要在這裏和那裏添加一些null支票,它應該是很好的去。