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

Posted

技术标签:

【中文标题】使用 ASP.NET 开发服务器设置 MIME 类型【英文标题】:Setting MIME types using the ASP.NET Development Server 【发布时间】:2011-08-20 22:41:48 【问题描述】:

我在 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 类型与默认的开发服务器一起工作。 【参考方案1】:

Visual Studio (Cassini) 中的内置开发 Web 服务器不知道 &lt;system.webServer&gt;,只有 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 运行非常容易,如果微软将 Cassini 服务器从下一版本的 Visual Studio 中移除,我不会感到惊讶。

【讨论】:

我赞成你的答案,因为它是准确的,但我绝对讨厌它:p 我真的不在乎想要搞砸 IIS 或任何东西,我只是想要它,这样当我遇到小绿时VS2010 中的播放按钮,它提供具有正确 MIME 类型的 PNG。那是过分的要求?显然是…… @user435779 - 感谢您的 +1。 IIS Express 相当轻松,并且会像 Cassini 一样运行。 IIS MMC 控制台没有任何问题。只需告诉 VS2010 您要在 IIS Express 中启动和调试(在您的项目属性 Web 选项卡中),然后按播放按钮...VS2010 会在后台静默地为您的项目配置 IIS Express。 这个答案真的很有帮助。作为对这样做的其他人的保证:安装 IIS 后我不得不重新启动 VS,并且在我的项目设置中切换到使用 IIS Express 后,VS 崩溃了,但除此之外它相当轻松且绝对值得。 IIS Express 非常好用,但并不是在所有情况下都有用,尤其是当您尝试调试两个单独的实例 app_start 和 app_end 时,如果您关闭其中任何一个实例,这两个实例都会结束。 +1 以获得非常清晰简洁的答案。 @Crypth - 感谢您的客气话。我同意,有时您需要打开完整的 IIS 并附加到进程以调试一些极端情况。【参考方案2】:

刚遇到这个问题,但必须找到 IIS Express 的配置,以便我可以添加 mime 类型。对我来说,它位于C:\Users\&lt;username&gt;\Documents\IISExpress\config\applicationhost.config,我可以在那里添加正确的“mime map”。

【讨论】:

这个修复只花了几秒钟!谢谢!对于尝试此操作的其他人,在开始编辑之前复制 applicationhost.config 的备份会发出警告。【参考方案3】:

同样可以通过使用 IIS 管理器修改 MIME 类型来完成 - Here

【讨论】:

以上是关于使用 ASP.NET 开发服务器设置 MIME 类型的主要内容,如果未能解决你的问题,请参考以下文章

由于不允许的 MIME 类型(“text/html”),ASP Net Core 内部的 Angular 8 被阻止

ASP.NET Core设置Web API 响应的数据格式——Produces 特性篇

xml 在ASP.NET项目的Web.config中定义Web字体Mime类型,以确保Web服务器正确处理为您的字体提供服务。

ASP.NET Web API,从 Flex FileReference 上传时 MIME 多部分流意外结束

在 asp.net 开发服务器中配置 CORS 设置

资源解释为“其他”,但以未定义的 MIME 类型传输。 IE 错误(Asp.net 网站)