tags:

views:

393

answers:

3

How can i get the MIME type from an extension? C# ASP.NET

+5  A: 

You can find that information in the registry. For instance, the MIME type for .pdf file can be found in the key HKEY_CLASSES_ROOT\.pdf, in the value "Content Type" :

string mimeType = Registry.GetValue(@"HKEY_CLASSES_ROOT\.pdf", "Content Type", null) as string;
Thomas Levesque
If you're on Windows, yes. The basic idea is "find where this information is given," and import that into a data structure of some sort.
maxwellb
The OP is related to ASP.NET... OK, ASP.NET can be run on Linux thanks to Mono, but that's not a very common scenario, so I think it's quite safe to assume that acidzombie24 is using Windows...
Thomas Levesque
I would assume Windows is a given when talking about ASP.NET and NOT specifying the use of Linux.
Wolf5
Hmm, .csv mime type is "application/vnd.ms-excel" on my machine, I wonder do you need some sort of universal MIME type? Or will it be specific only to the one server it is run on. Check a CSV on server A, could be a different MIME type than on server B. It will be important to remember this is not a 1-to-1 scenario.
maxwellb
Be careful with this solution, as the result depends on the software the client has installed. i.e. without Office, .doc doesn't have any Content Type.
Marc Climent
A: 

You could use the table provided from Apache's httpd. It should be trivial to map this into a function, dictionary, list, etc.

Also, as seen here, extension->mime type is not necessarily a function. There may be multiple common MIME types per file extension, so you should look at the requirements of your application, and see why you care about MIME types, what you want "to do" with them, etc. Can you use file extensions to key the same behavior? Do you need to read the first few bytes of a file to determine its MIME type as well?

maxwellb
A: 

I've found many mime types my application uses are not in the default Windows registry and others are in the registry but not in the list included with IIS. I've compiled a list from these locations and added a few others that we use.

public static string GetMimeType(string extension)
{
    if (extension == null)
    {
        throw new ArgumentNullException("extension");
    }

    if (!extension.StartsWith("."))
    {
        extension = "." + extension;
    }

    switch(extension)
    {
        #region Big freaking list of mime types
        // combination of values from Windows 7 Registry and 
        // from C:\Windows\System32\inetsrv\config\applicationHost.config
        // some added, including .7z and .dat

        case ".323": return "text/h323";
        case ".3g2": return "video/3gpp2";
        case ".3gp": return "video/3gpp";
        case ".3gp2": return "video/3gpp2";
        case ".3gpp": return "video/3gpp";
        case ".7z": return "application/x-7z-compressed";
        case ".aa": return "audio/audible";
        case ".AAC": return "audio/aac";
        case ".aaf": return "application/octet-stream";
        case ".aax": return "audio/vnd.audible.aax";
        case ".ac3": return "audio/ac3";
        case ".aca": return "application/octet-stream";
        case ".accda": return "application/msaccess.addin";
        case ".accdb": return "application/msaccess";
        case ".accdc": return "application/msaccess.cab";
        case ".accde": return "application/msaccess";
        case ".accdr": return "application/msaccess.runtime";
        case ".accdt": return "application/msaccess";
        case ".accdw": return "application/msaccess.webapplication";
        case ".accft": return "application/msaccess.ftemplate";
        case ".acx": return "application/internet-property-stream";
        case ".AddIn": return "text/xml";
        case ".ade": return "application/msaccess";
        case ".adobebridge": return "application/x-bridge-url";
        case ".adp": return "application/msaccess";
        case ".ADT": return "audio/vnd.dlna.adts";
        case ".ADTS": return "audio/aac";
        case ".afm": return "application/octet-stream";
        case ".ai": return "application/postscript";
        case ".aif": return "audio/x-aiff";
        case ".aifc": return "audio/aiff";
        case ".aiff": return "audio/aiff";
        case ".air": return "application/vnd.adobe.air-application-installer-package+zip";
        case ".amc": return "application/x-mpeg";
        case ".application": return "application/x-ms-application";
        case ".art": return "image/x-jg";
        case ".asa": return "application/xml";
        case ".asax": return "application/xml";
        case ".ascx": return "application/xml";
        case ".asd": return "application/octet-stream";
        case ".asf": return "video/x-ms-asf";
        case ".ashx": return "application/xml";
        case ".asi": return "application/octet-stream";
        case ".asm": return "text/plain";
        case ".asmx": return "application/xml";
        case ".aspx": return "application/xml";
        case ".asr": return "video/x-ms-asf";
        case ".asx": return "video/x-ms-asf";
        case ".atom": return "application/atom+xml";
        case ".au": return "audio/basic";
        case ".avi": return "video/x-msvideo";
        case ".axs": return "application/olescript";
        case ".bas": return "text/plain";
        case ".bcpio": return "application/x-bcpio";
        case ".bin": return "application/octet-stream";
        case ".bmp": return "image/bmp";
        case ".c": return "text/plain";
        case ".cab": return "application/octet-stream";
        case ".caf": return "audio/x-caf";
        case ".calx": return "application/vnd.ms-office.calx";
        case ".cat": return "application/vnd.ms-pki.seccat";
        case ".cc": return "text/plain";
        case ".cd": return "text/plain";
        case ".cdda": return "audio/aiff";
        case ".cdf": return "application/x-cdf";
        case ".cer": return "application/x-x509-ca-cert";
        case ".chm": return "application/octet-stream";
        case ".class": return "application/x-java-applet";
        case ".clp": return "application/x-msclip";
        case ".cmx": return "image/x-cmx";
        case ".cnf": return "text/plain";
        case ".cod": return "image/cis-cod";
        case ".config": return "application/xml";
        case ".contact": return "text/x-ms-contact";
        case ".coverage": return "application/xml";
        case ".cpio": return "application/x-cpio";
        case ".cpp": return "text/plain";
        case ".crd": return "application/x-mscardfile";
        case ".crl": return "application/pkix-crl";
        case ".crt": return "application/x-x509-ca-cert";
        case ".cs": return "text/plain";
        case ".csdproj": return "text/plain";
        case ".csh": return "application/x-csh";
        case ".csproj": return "text/plain";
        case ".css": return "text/css";
        case ".csv": return "application/octet-stream";
        case ".cur": return "application/octet-stream";
        case ".cxx": return "text/plain";
        case ".dat": return "application/octet-stream";
        case ".datasource": return "application/xml";
        case ".dbproj": return "text/plain";
        case ".dcr": return "application/x-director";
        case ".def": return "text/plain";
        case ".deploy": return "application/octet-stream";
        case ".der": return "application/x-x509-ca-cert";
        case ".dgml": return "application/xml";
        case ".dib": return "image/bmp";
        case ".dif": return "video/x-dv";
        case ".dir": return "application/x-director";
        case ".disco": return "text/xml";
        case ".dll": return "application/x-msdownload";
        case ".dll.config": return "text/xml";
        case ".dlm": return "text/dlm";
        case ".doc": return "application/msword";
        case ".docm": return "application/vnd.ms-word.document.macroEnabled.12";
        case ".docx": return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
        case ".dot": return "application/msword";
        case ".dotm": return "application/vnd.ms-word.template.macroEnabled.12";
        case ".dotx": return "application/vnd.openxmlformats-officedocument.wordprocessingml.template";
        case ".dsp": return "application/octet-stream";
        case ".dsw": return "text/plain";
        case ".dtd": return "text/xml";
        case ".dtsConfig": return "text/xml";
        case ".dv": return "video/x-dv";
        case ".dvi": return "application/x-dvi";
        case ".dwf": return "drawing/x-dwf";
        case ".dwp": return "application/octet-stream";
        case ".dxr": return "application/x-director";
        case ".eml": return "message/rfc822";
        case ".emz": return "application/octet-stream";
        case ".eot": return "application/octet-stream";
        case ".eps": return "application/postscript";
        case ".etl": return "application/etl";
        case ".etx": return "text/x-setext";
        case ".evy": return "application/envoy";
        case ".exe": return "application/octet-stream";
        case ".exe.config": return "text/xml";
        case ".fdf": return "application/vnd.fdf";
        case ".fif": return "application/fractals";
        case ".filters": return "Application/xml";
        case ".fla": return "application/octet-stream";
        case ".flr": return "x-world/x-vrml";
        case ".flv": return "video/x-flv";
        case ".fsscript": return "application/fsharp-script";
        case ".fsx": return "application/fsharp-script";
        case ".generictest": return "application/xml";
        case ".gif": return "image/gif";
        case ".group": return "text/x-ms-group";
        case ".gsm": return "audio/x-gsm";
        case ".gtar": return "application/x-gtar";
        case ".gz": return "application/x-gzip";
        case ".h": return "text/plain";
        case ".hdf": return "application/x-hdf";
        case ".hdml": return "text/x-hdml";
        case ".hhc": return "application/x-oleobject";
        case ".hhk": return "application/octet-stream";
        case ".hhp": return "application/octet-stream";
        case ".hlp": return "application/winhlp";
        case ".hpp": return "text/plain";
        case ".hqx": return "application/mac-binhex40";
        case ".hta": return "application/hta";
        case ".htc": return "text/x-component";
        case ".htm": return "text/html";
        case ".html": return "text/html";
        case ".htt": return "text/webviewhtml";
        case ".hxa": return "application/xml";
        case ".hxc": return "application/xml";
        case ".hxd": return "application/octet-stream";
        case ".hxe": return "application/xml";
        case ".hxf": return "application/xml";
        case ".hxh": return "application/octet-stream";
        case ".hxi": return "application/octet-stream";
        case ".hxk": return "application/xml";
        case ".hxq": return "application/octet-stream";
        case ".hxr": return "application/octet-stream";
        case ".hxs": return "application/octet-stream";
        case ".hxt": return "text/html";
        case ".hxv": return "application/xml";
        case ".hxw": return "application/octet-stream";
        case ".hxx": return "text/plain";
        case ".i": return "text/plain";
        case ".ico": return "image/x-icon";
        case ".ics": return "application/octet-stream";
        case ".idl": return "text/plain";
        case ".ief": return "image/ief";
        case ".iii": return "application/x-iphone";
        case ".inc": return "text/plain";
        case ".inf": return "application/octet-stream";
        case ".inl": return "text/plain";
        case ".ins": return "application/x-internet-signup";
        case ".ipa": return "application/x-itunes-ipa";
        case ".ipg": return "application/x-itunes-ipg";
        case ".ipproj": return "text/plain";
        case ".ipsw": return "application/x-itunes-ipsw";
        case ".iqy": return "text/x-ms-iqy";
        case ".isp": return "application/x-internet-signup";
        case ".ite": return "application/x-itunes-ite";
        case ".itlp": return "application/x-itunes-itlp";
        case ".itms": return "application/x-itunes-itms";
        case ".itpc": return "application/x-itunes-itpc";
        case ".IVF": return "video/x-ivf";
        case ".jar": return "application/java-archive";
        case ".java": return "application/octet-stream";
        case ".jck": return "application/liquidmotion";
        case ".jcz": return "application/liquidmotion";
        case ".jfif": return "image/pjpeg";
        case ".jnlp": return "application/x-java-jnlp-file";
        case ".jpb": return "application/octet-stream";
        case ".jpe": return "image/jpeg";
        case ".jpeg": return "image/jpeg";
        case ".jpg": return "image/jpeg";
        case ".js": return "application/x-javascript";
        case ".jsx": return "text/jscript";
        case ".jsxbin": return "text/plain";
        case ".latex": return "application/x-latex";
        case ".library-ms": return "application/windows-library+xml";
        case ".lit": return "application/x-ms-reader";
        case ".loadtest": return "application/xml";
        case ".lpk": return "application/octet-stream";
        case ".lsf": return "video/x-la-asf";
        case ".lst": return "text/plain";
        case ".lsx": return "video/x-la-asf";
        case ".lzh": return "application/octet-stream";
        case ".m13": return "application/x-msmediaview";
        case ".m14": return "application/x-msmediaview";
        case ".m1v": return "video/mpeg";
        case ".m2t": return "video/vnd.dlna.mpeg-tts";
        case ".m2ts": return "video/vnd.dlna.mpeg-tts";
        case ".m2v": return "video/mpeg";
        case ".m3u": return "audio/x-mpegurl";
        case ".m3u8": return "audio/x-mpegurl";
        case ".m4a": return "audio/m4a";
        case ".m4b": return "audio/m4b";
        case ".m4p": return "audio/m4p";
        case ".m4r": return "audio/x-m4r";
        case ".m4v": return "video/x-m4v";
        case ".mac": return "image/x-macpaint";
        case ".mak": return "text/plain";
        case ".man": return "application/x-troff-man";
        case ".manifest": return "application/x-ms-manifest";
        case ".map": return "text/plain";
        case ".master": return "application/xml";
        case ".mda": return "application/msaccess";
        case ".mdb": return "application/x-msaccess";
        case ".mde": return "application/msaccess";
        case ".mdp": return "application/octet-stream";
        case ".me": return "application/x-troff-me";
        case ".mfp": return "application/x-shockwave-flash";
        case ".mht": return "message/rfc822";
        case ".mhtml": return "message/rfc822";
        case ".mid": return "audio/mid";
        case ".midi": return "audio/mid";
        case ".mix": return "application/octet-stream";
        case ".mk": return "text/plain";
        case ".mmf": return "application/x-smaf";
        case ".mno": return "text/xml";
        case ".mny": return "application/x-msmoney";
        case ".mod": return "video/mpeg";
        case ".mov": return "video/quicktime";
        case ".movie": return "video/x-sgi-movie";
        case ".mp2": return "video/mpeg";
        case ".mp2v": return "video/mpeg";
        case ".mp3": return "audio/mpeg";
        case ".mp4": return "video/mp4";
        case ".mp4v": return "video/mp4";
        case ".mpa": return "video/mpeg";
        case ".mpe": return "video/mpeg";
        case ".mpeg": return "video/mpeg";
        case ".mpf": return "application/vnd.ms-mediapackage";
        case ".mpg": return "video/mpeg";
        case ".mpp": return "application/vnd.ms-project";
        case ".mpv2": return "video/mpeg";
        case ".mqv": return "video/quicktime";
        case ".ms": return "application/x-troff-ms";
        case ".msi": return "application/octet-stream";
        case ".mso": return "application/octet-stream";
        case ".mts": return "video/vnd.dlna.mpeg-tts";
        case ".mtx": return "application/xml";
        case ".mvb": return "application/x-msmediaview";
        case ".mvc": return "application/x-miva-compiled";
        case ".mxp": return "application/x-mmxp";
        case ".nc": return "application/x-netcdf";
        case ".nsc": return "video/x-ms-asf";
        case ".nws": return "message/rfc822";
        case ".ocx": return "application/octet-stream";
        case ".oda": return "application/oda";
        case ".odc": return "text/x-ms-odc";
        case ".odh": return "text/plain";
        case ".odl": return "text/plain";
        case ".odp": return "application/vnd.oasis.opendocument.presentation";
        case ".ods": return "application/oleobject";
        case ".odt": return "application/vnd.oasis.opendocument.text";
        case ".one": return "application/onenote";
        case ".onea": return "application/onenote";
        case ".onepkg": return "application/onenote";
        case ".onetmp": return "application/onenote";
        case ".onetoc": return "application/onenote";
        case ".onetoc2": return "application/onenote";
        case ".orderedtest": return "application/xml";
        case ".osdx": return "application/opensearchdescription+xml";
        case ".p10": return "application/pkcs10";
        case ".p12": return "application/x-pkcs12";
        case ".p7b": return "application/x-pkcs7-certificates";
        case ".p7c": return "application/pkcs7-mime";
        case ".p7m": return "application/pkcs7-mime";
        case ".p7r": return "application/x-pkcs7-certreqresp";
        case ".p7s": return "application/pkcs7-signature";
        case ".pbm": return "image/x-portable-bitmap";
        case ".pcast": return "application/x-podcast";
        case ".pct": return "image/pict";
        case ".pcx": return "application/octet-stream";
        case ".pcz": return "application/octet-stream";
        case ".pdf": return "application/pdf";
        case ".pfb": return "application/octet-stream";
        case ".pfm": return "application/octet-stream";
        case ".pfx": return "application/x-pkcs12";
        case ".pgm": return "image/x-portable-graymap";
        case ".pic": return "image/pict";
        case ".pict": return "image/pict";
        case ".pkgdef": return "text/plain";
        case ".pkgundef": return "text/plain";
        case ".pko": return "application/vnd.ms-pki.pko";
        case ".pls": return "audio/scpls";
        case ".pma": return "application/x-perfmon";
        case ".pmc": return "application/x-perfmon";
        case ".pml": return "application/x-perfmon";
        case ".pmr": return "application/x-perfmon";
        case ".pmw": return "application/x-perfmon";
        case ".png": return "image/png";
        case ".pnm": return "image/x-portable-anymap";
        case ".pnt": return "image/x-macpaint";
        case ".pntg": return "image/x-macpaint";
        case ".pnz": return "image/png";
        case ".pot": return "application/vnd.ms-powerpoint";
        case ".potm": return "application/vnd.ms-powerpoint.template.macroEnabled.12";
        case ".potx": return "application/vnd.openxmlformats-officedocument.presentationml.template";
        case ".ppa": return "application/vnd.ms-powerpoint";
        case ".ppam": return "application/vnd.ms-powerpoint.addin.macroEnabled.12";
        case ".ppm": return "image/x-portable-pixmap";
        case ".pps": return "application/vnd.ms-powerpoint";
        case ".ppsm": return "application/vnd.ms-powerpoint.slideshow.macroEnabled.12";
        case ".ppsx": return "application/vnd.openxmlformats-officedocument.presentationml.slideshow";
        case ".ppt": return "application/vnd.ms-powerpoint";
        case ".pptm": return "application/vnd.ms-powerpoint.presentation.macroEnabled.12";
        case ".pptx": return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
        case ".prf": return "application/pics-rules";
        case ".prm": return "application/octet-stream";
        case ".prx": return "application/octet-stream";
        case ".ps": return "application/postscript";
        case ".psc1": return "application/PowerShell";
        case ".psd": return "application/octet-stream";
        case ".psess": return "application/xml";
        case ".psm": return "application/octet-stream";
        case ".psp": return "application/octet-stream";
        case ".pub": return "application/x-mspublisher";
        case ".pwz": return "application/vnd.ms-powerpoint";
        case ".qht": return "text/x-html-insertion";
        case ".qhtm": return "text/x-html-insertion";
        case ".qt": return "video/quicktime";
        case ".qti": return "image/x-quicktime";
        case ".qtif": return "image/x-quicktime";
        case ".qtl": return "application/x-quicktimeplayer";
        case ".qxd": return "application/octet-stream";
        case ".ra": return "audio/x-pn-realaudio";
        case ".ram": return "audio/x-pn-realaudio";
        case ".rar": return "application/octet-stream";
        case ".ras": return "image/x-cmu-raster";
        case ".rat": return "application/rat-file";
        case ".rc": return "text/plain";
        case ".rc2": return "text/plain";
        case ".rct": return "text/plain";
        case ".rdlc": return "application/xml";
        case ".resx": return "application/xml";
        case ".rf": return "image/vnd.rn-realflash";
        case ".rgb": return "image/x-rgb";
        case ".rgs": return "text/plain";
        case ".rm": return "application/vnd.rn-realmedia";
        case ".rmi": return "audio/mid";
        case ".rmp": return "application/vnd.rn-rn_music_package";
        case ".roff": return "application/x-troff";
        case ".rpm": return "audio/x-pn-realaudio-plugin";
        case ".rqy": return "text/x-ms-rqy";
        case ".rtf": return "application/rtf";
        case ".rtx": return "text/richtext";
        case ".ruleset": return "application/xml";
        case ".s": return "text/plain";
        case ".safariextz": return "application/x-safari-safariextz";
        case ".scd": return "application/x-msschedule";
        case ".sct": return "text/scriptlet";
        case ".sd2": return "audio/x-sd2";
        case ".sdp": return "application/sdp";
        case ".sea": return "application/octet-stream";
        case ".searchConnector-ms": return "application/windows-search-connector+xml";
        case ".setpay": return "application/set-payment-initiation";
        case ".setreg": return "application/set-registration-initiation";
        case ".settings": return "application/xml";
        case ".sgimb": return "application/x-sgimb";
        case ".sgml": return "text/sgml";
        case ".sh": return "application/x-sh";
        case ".shar": return "application/x-shar";
        case ".shtml": return "text/html";
        case ".sit": return "application/x-stuffit";
        case ".sitemap": return "application/xml";
        case ".skin": return "application/xml";
        case ".sldm": return "application/vnd.ms-powerpoint.slide.macroEnabled.12";
        case ".sldx": return "application/vnd.openxmlformats-officedocument.presentationml.slide";
        case ".slk": return "application/vnd.ms-excel";
        case ".sln": return "text/plain";
        case ".slupkg-ms": return "application/x-ms-license";
        case ".smd": return "audio/x-smd";
        case ".smi": return "application/octet-stream";
        case ".smx": return "audio/x-smd";
        case ".smz": return "audio/x-smd";
        case ".snd": return "audio/basic";
        case ".snippet": return "application/xml";
        case ".snp": return "application/octet-stream";
        case ".sol": return "text/plain";
        case ".sor": return "text/plain";
        case ".spc": return "application/x-pkcs7-certificates";
        case ".spl": return "application/futuresplash";
        case ".src": return "application/x-wais-source";
        case ".srf": return "text/plain";
        case ".SSISDeploymentManifest": return "text/xml";
        case ".ssm": return "application/streamingmedia";
        case ".sst": return "application/vnd.ms-pki.certstore";
        case ".stl": return "application/vnd.ms-pki.stl";
        case ".sv4cpio": return "application/x-sv4cpio";
        case ".sv4crc": return "application/x-sv4crc";
        case ".svc": return "application/xml";
        case ".swf": return "application/x-shockwave-flash";
        case ".t": return "application/x-troff";
        case ".tar": return "application/x-tar";
        case ".tcl": return "application/x-tcl";
        case ".testrunconfig": return "application/xml";
        case ".testsettings": return "application/xml";
        case ".tex": return "application/x-tex";
        case ".texi": return "application/x-texinfo";
        case ".texinfo": return "application/x-texinfo";
        case ".tgz": return "application/x-compressed";
        case ".thmx": return "application/vnd.ms-officetheme";
        case ".thn": return "application/octet-stream";
        case ".tif": return "image/tiff";
        case ".tiff": return "image/tiff";
        case ".tlh": return "text/plain";
        case ".tli": return "text/plain";
        case ".toc": return "application/octet-stream";
        case ".tr": return "application/x-troff";
        case ".trm": return "application/x-msterminal";
        case ".trx": return "application/xml";
        case ".ts": return "video/vnd.dlna.mpeg-tts";
        case ".tsv": return "text/tab-separated-values";
        case ".ttf": return "application/octet-stream";
        case ".tts": return "video/vnd.dlna.mpeg-tts";
        case ".txt": return "text/plain";
        case ".u32": return "application/octet-stream";
        case ".uls": return "text/iuls";
        case ".user": return "text/plain";
        case ".ustar": return "application/x-ustar";
        case ".vb": return "text/plain";
        case ".vbdproj": return "text/plain";
        case ".vbk": return "video/mpeg";
        case ".vbproj": return "text/plain";
        case ".vbs": return "text/vbscript";
        case ".vcf": return "text/x-vcard";
        case ".vcproj": return "Application/xml";
        case ".vcs": return "text/plain";
        case ".vcxproj": return "Application/xml";
        case ".vddproj": return "text/plain";
        case ".vdp": return "text/plain";
        case ".vdproj": return "text/plain";
        case ".vdx": return "application/vnd.ms-visio.viewer";
        case ".vml": return "text/xml";
        case ".vscontent": return "application/xml";
        case ".vsct": return "text/xml";
        case ".vsd": return "application/vnd.visio";
        case ".vsi": return "application/ms-vsi";
        case ".vsix": return "application/vsix";
        case ".vsixlangpack": return "text/xml";
        case ".vsixmanifest": return "text/xml";
        case ".vsmdi": return "application/xml";
        case ".vspscc": return "text/plain";
        case ".vss": return "application/vnd.visio";
        case ".vsscc": return "text/plain";
        case ".vssettings": return "text/xml";
        case ".vssscc": return "text/plain";
        case ".vst": return "application/vnd.visio";
        case ".vstemplate": return "text/xml";
        case ".vsto": return "application/x-ms-vsto";
        case ".vsw": return "application/vnd.visio";
        case ".vsx": return "application/vnd.visio";
        case ".vtx": return "application/vnd.visio";
        case ".wav": return "audio/wav";
        case ".wave": return "audio/wav";
        case ".wax": return "audio/x-ms-wax";
        case ".wbk": return "application/msword";
        case ".wbmp": return "image/vnd.wap.wbmp";
        case ".wcm": return "application/vnd.ms-works";
        case ".wdb": return "application/vnd.ms-works";
        case ".wdp": return "image/vnd.ms-photo";
        case ".webarchive": return "application/x-safari-webarchive";
        case ".webtest": return "application/xml";
        case ".wiq": return "application/xml";
        case ".wiz": return "application/msword";
        case ".wks": return "application/vnd.ms-works";
        case ".WLMP": return "application/wlmoviemaker";
        case ".wlpginstall": return "application/x-wlpg-detect";
        case ".wlpginstall3": return "application/x-wlpg3-detect";
        case ".wm": return "video/x-ms-wm";
        case ".wma": return "audio/x-ms-wma";
        case ".wmd": return "application/x-ms-wmd";
        case ".WMD": return "application/x-ms-wmd";
        case ".wmf": return "application/x-msmetafile";
        case ".wml": return "text/vnd.wap.wml";
        case ".wmlc": return "application/vnd.wap.wmlc";
        case ".wmls": return "text/vnd.wap.wmlscript";
        case ".wmlsc": return "application/vnd.wap.wmlscriptc";
        case ".wmp": return "video/x-ms-wmp";
        case ".wmv": return "video/x-ms-wmv";
        case ".wmx": return "video/x-ms-wmx";
        case ".wmz": return "application/x-ms-wmz";
        case ".wpl": return "application/vnd.ms-wpl";
        case ".wps": return "application/vnd.ms-works";
        case ".wri": return "application/x-mswrite";
        case ".wrl": return "x-world/x-vrml";
        case ".wrz": return "x-world/x-vrml";
        case ".wsc": return "text/scriptlet";
        case ".wsdl": return "text/xml";
        case ".wvx": return "video/x-ms-wvx";
        case ".x": return "application/directx";
        case ".xaf": return "x-world/x-vrml";
        case ".xaml": return "application/xaml+xml";
        case ".xap": return "application/x-silverlight-app";
        case ".xbap": return "application/x-ms-xbap";
        case ".xbm": return "image/x-xbitmap";
        case ".xdr": return "text/plain";
        case ".xht": return "application/xhtml+xml";
        case ".xhtml": return "application/xhtml+xml";
        case ".xla": return "application/vnd.ms-excel";
        case ".xlam": return "application/vnd.ms-excel.addin.macroEnabled.12";
        case ".xlc": return "application/vnd.ms-excel";
        case ".xld": return "application/vnd.ms-excel";
        case ".xlk": return "application/vnd.ms-excel";
        case ".xll": return "application/vnd.ms-excel";
        case ".xlm": return "application/vnd.ms-excel";
        case ".xls": return "application/vnd.ms-excel";
        case ".xlsb": return "application/vnd.ms-excel.sheet.binary.macroEnabled.12";
        case ".xlsm": return "application/vnd.ms-excel.sheet.macroEnabled.12";
        case ".xlsx": return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        case ".xlt": return "application/vnd.ms-excel";
        case ".xltm": return "application/vnd.ms-excel.template.macroEnabled.12";
        case ".xltx": return "application/vnd.openxmlformats-officedocument.spreadsheetml.template";
        case ".xlw": return "application/vnd.ms-excel";
        case ".xml": return "text/xml";
        case ".xmta": return "application/xml";
        case ".xof": return "x-world/x-vrml";
        case ".XOML": return "text/plain";
        case ".xpm": return "image/x-xpixmap";
        case ".xps": return "application/vnd.ms-xpsdocument";
        case ".xrm-ms": return "text/xml";
        case ".xsc": return "application/xml";
        case ".xsd": return "text/xml";
        case ".xsf": return "text/xml";
        case ".xsl": return "text/xml";
        case ".xslt": return "text/xml";
        case ".xsn": return "application/octet-stream";
        case ".xss": return "application/xml";
        case ".xtp": return "application/octet-stream";
        case ".xwd": return "image/x-xwindowdump";
        case ".z": return "application/x-compress";
        case ".zip": return "application/x-zip-compressed";

        #endregion

        default:
            // if you have logging, log: "No mime type is registered for extension: " + extension);
            return "application/octet-stream";
    }
}
Sam
Somehow I have a feeling that building an associative data structure from a data file at startup would be a bit saner.
Jon Purdy
@Joh Purdy, agreed
Sam