C# Get file extension by content type

[2019] .NET Core / Standard compatible portable way

While Bradley's answer continues to be perfect on regular old Windows machines running .NET Framework, Registry is Windows-specific and will fail when porting the app to a non-Windows environment.

Fortunately there is a very small NuGet library that essentially contains a hardcoded map of the official MIME types and corresponding extensions without any external dependencies here: https://github.com/samuelneff/MimeTypeMap. It is available on NuGet as MediaTypeMap. After installing the package calling it is as simple as:

MimeTypeMap.GetExtension("audio/wav")

To put it into your example you can simply:

private static string GetExtension(string contentType)
{
    return MimeTypes.MimeTypeMap.GetExtension(contentType);
}

The "Best" solution that I know of is to query the registry. You can find example code here. http://cyotek.com/blog/mime-types-and-file-extensions

 public static string GetDefaultExtension(string mimeType)
    {
      string result;
      RegistryKey key;
      object value;

      key = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + mimeType, false);
      value = key != null ? key.GetValue("Extension", null) : null;
      result = value != null ? value.ToString() : string.Empty;

      return result;
    }