Как прочитать раздел из web.config на IIS7 w / .net 4 в C # - PullRequest
4 голосов
/ 24 февраля 2011

В моем web.config есть следующий раздел:

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

По сути, мне нужно найти mimeMaps по fileExtension и получить их mimeType.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Вам необходимо создать пользовательский раздел конфигурации , чтобы получить эту информацию.

1 голос
/ 24 февраля 2011

Джордж Стокер ответ привел меня к поиску в Google для ["staticContent" custom configuration section], который привел меня к статье на iis.net под названием Добавление статического содержимого MIME Mappings .

Статья заставила меня придумать:

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 здесь и там, и это будет хорошо.

...