以编程方式在 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
我正在使用 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