以编程方式在 System.Web.MimeMapping 中添加自定义 MIME 类型

Add custom MIME type in System.Web.MimeMapping programmatically

我正在使用 System.Web 程序集中的 MimeMapping class 从文件扩展名中获取 MIME 类型。

但在 .HEIC 扩展的情况下,它返回的 mime 类型为 application/octet-stream。但是与此扩展关联的原始 mime 类型是 image/heic.

MimeMapping.GetMimeMapping("something.HEIC")//returning application/octet-stream

MimeMapping class 是否提供任何 api 添加新的映射以便我可以获得正确的 mime 类型?

感谢 Rup 的提示和反思。我创建了一个方法,可用于将自定义 mime 类型添加到 MimeMapping class 用于解析 mime 类型的私有静态变量。

        public static void RegisterMimeTypes(IDictionary<string, string> mimeTypes)
        {
            if (mimeTypes == null || mimeTypes.Count == 0)
                return;
            var field = typeof(System.Web.MimeMapping).GetField("_mappingDictionary",
                        System.Reflection.BindingFlags.NonPublic |
                        System.Reflection.BindingFlags.Static);

            var currentValues = field.GetValue(null);
            var add = field.FieldType.GetMethod("AddMapping",
                      System.Reflection.BindingFlags.NonPublic |
                      System.Reflection.BindingFlags.Instance);

            foreach (var mime in mimeTypes)
            {
                add.Invoke(currentValues, new object[] { mime.Key, mime.Value });
            }

        }

现在您可以在应用程序启动时注册您的自定义 MIME 类型列表,如下所示

    var mimeTypes = new Dictionary<string, string>()
    {
        { ".heic", "image/heic"},
        {".extn", "custom/mime" }
    };

    RegisterMimeTypes(mimeTypes);

例子

MimeMapping.GetMimeMapping("filename.heic")// will return image/heic