使用ASP.NET开发服务器设置MIME类型

39

我将以下内容添加到web.config文件中,但这似乎被内置于Visual Studio 2010的开发服务器所忽略。有人知道如何修改开发服务器中的MIME类型吗?

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
    <staticContent>
        <mimeMap fileExtension=".mp4" mimeType="video/mp4" />          
        <mimeMap fileExtension=".ogg" mimeType="audio/ogg" />          
        <mimeMap fileExtension=".oga" mimeType="audio/ogg" />          
        <mimeMap fileExtension=".ogv" mimeType="video/ogg" />          
        <mimeMap fileExtension=".webm" mimeType="video/webm" />     
    </staticContent>  
</system.webServer>

刚想起来我现在可以在VS2010 SP1中使用IIS Express,这让我很开心。当然,我也可以切换到完整的IIS来解决问题...但我很好奇是否有办法使MIME类型与默认的开发服务器一起工作。 - Martin Beeby
3个回答

40

Visual Studio内置的开发Web服务器(Cassini)不知道<system.webServer>,只有IIS7.x或IIS7.5 Express将使用这些设置。

此外,Visual Studio开发Web服务器中的静态文件内容类型是硬编码的。

来自Microsoft.VisualStudio.WebHost.Connection(使用.NET Reflector进行反汇编):

private static string MakeContentTypeHeader(string fileName)
{
    string str = null;
    FileInfo info = new FileInfo(fileName);
    switch (info.Extension.ToLowerInvariant())
    {
        case ".bmp":
            str = "image/bmp";
            break;

        case ".css":
            str = "text/css";
            break;

        case ".gif":
            str = "image/gif";
            break;

        case ".ico":
            str = "image/x-icon";
            break;

        case ".htm":
        case ".html":
            str = "text/html";
            break;

        case ".jpe":
        case ".jpeg":
        case ".jpg":
            str = "image/jpeg";
            break;

        case ".js":
            str = "application/x-javascript";
            break;
    }
    if (str == null)
    {
        return null;
    }
    return ("Content-Type: " + str + "\r\n");
}
说实话,随着IIS7.5 Express的出现,我不明白为什么你还要使用内置的Web服务器。Cassini可能会在部署到生产服务器时造成很多混乱,因为它与真正的服务器有很大的差别(安全性、配置等方面),而如果你能让你的站点运行在IIS7.5 Express上,那么部署到生产IIS7.5服务器上的概率就相当高了,"只需运行"。考虑到如此容易使用IIS7.5 Express,微软可能会在下一个Visual Studio版本中撤回Cassini服务器也不足为奇。

7
我点赞你的回答是因为它很准确,但我真的很讨厌它 :p 我不太在意要和IIS折腾什么,我只是想当我在VS2010中点击小绿色播放按钮时,能够呈现出正确MIME类型的PNG图像。这样太难了吗?显然是... - user435779
2
@user435779 - 感谢你的点赞。IIS Express非常简便,可以像Cassini一样运行。不需要在IIS MMC控制台上瞎折腾。只需要在项目属性Web选项卡中告诉VS2010你想要在IIS Express中启动和调试,然后点击播放按钮... VS2010会在幕后默默地为你的项目配置IIS Express。 - Kev
这个答案真的很有帮助。作为对其他人的保证:在安装IIS后,我不得不重新启动VS,并且在将项目设置切换到使用IIS Express后,我的VS崩溃了,但是除此之外,整个过程还是相当顺利和值得的。 - Jordan Gray
@Kev同意。但是,将轻量级的Cassini与您的IIS/Express协作也非常有用。 - Crypth
@nim - 你能详细说明一下你的评论吗?我不确定我理解你想要纠正什么。 - Kev
显示剩余7条评论

4

我刚刚遇到了这个问题,但是我需要找到IIS Express的配置文件才能添加mime类型。对于我来说,它位于 C:\Users\<username>\Documents\IISExpress\config\applicationhost.config,我可以在那里添加正确的“mime映射”。


1
这个修复只花了几秒钟的时间!谢谢!对于任何其他尝试此操作的人,警告要在开始编辑之前复制applicationhost.config的备份。 - Carl Walsh

0

可以通过使用IIS管理器修改MIME类型来完成同样的操作,具体方法请参考此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接