There's a non-public method that .NET uses under the hood to do this. I have devised a way to steal the functionality and make it public:
/// <summary>
/// Exposes the Mime Mapping method that Microsoft hid from us.
/// </summary>
public static class MimeMappingStealer
{
    // The get mime mapping method
    private static readonly Func<string, string> _getMimeMappingMethod = null;
    /// <summary>
    /// Static constructor sets up reflection.
    /// </summary>
    static MimeMappingStealer()
    {
        // Load hidden mime mapping class and method from System.Web
        var assembly = Assembly.GetAssembly(typeof(HttpApplication));
        Type mimeMappingType = assembly.GetType("System.Web.MimeMapping");
        _getMimeMappingMethod = (Func<string, string>)Delegate.CreateDelegate(typeof(Func<string, string>), mimeMappingType.GetMethod("GetMimeMapping", 
            BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public |
            BindingFlags.NonPublic | BindingFlags.FlattenHierarchy));
    }
    /// <summary>
    /// Exposes the hidden Mime mapping method.
    /// </summary>
    /// <param name="fileName">The file name.</param>
    /// <returns>The mime mapping.</returns>
    public static string GetMimeMapping(string fileName)
    {
        return _getMimeMappingMethod(fileName);
    }
}
To use:
var fileName1 = "whatever.js";
var fileName2 = "somefile.css";
var fileName3 = "myfile.html";
MimeMappingStealer.GetMimeMapping(fileName1) // application/x-javascript    
MimeMappingStealer.GetMimeMapping(fileName2) // text/css
MimeMappingStealer.GetMimeMapping(fileName3) // text/html
This code from my blog: http://www.haneycodes.net/a-better-mime-mapping-stealer/