Setting MIME types using the ASP.NET Development Server

The built-in development web server in Visual Studio (Cassini) has no knowledge of <system.webServer>, only IIS7.x or IIS7.5 Express will consume these settings.

Also the static file content types in Visual Studio’s development web server are hard coded.

From Microsoft.VisualStudio.WebHost.Connection (disassembled using .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");
}

To be honest, with the advent of IIS7.5 Express I can’t see why you’d want to use the built-in web server. Cassini can be the cause of so much confusion when it comes to deployment time on a production server because it’s nothing like the real deal (security, configuration etc) whereas if you can get your site running on IIS7.5 Express then there’s a fairly high probability that deployment onto a production IIS7.5 server will “just work”.

I wouldn’t be surprised if Microsoft yanked the Cassini server from the next version of Visual Studio given how easy it is to run with IIS7.5 Express.

Leave a Comment