当前位置: 首页 > 编程语言 > C#

如何在ASP.NETC#中获取请求文件的MIME类型?分享

时间:2023-04-11 11:50:46 C#

ASP.NETC#如何获取请求文件的MIME类型?我想根据MIME类型处理不同的请求。例如,我有PDF、图像和其他媒体文件,我想根据它们各自的MIME类型禁止访问。关于如何做到这一点的任何想法?感谢您的帮助。我还应该注意,访问Windows注册表不是我的应用程序的选项。.NET的mime类型映射存储在System.Web.MimeMapping类中,该类提供GetMimeMapping方法。在.NET4.5之前,此类被标记为内部类,因此您的代码将无法运行。在这种情况下,你能做的最好的事情就是窃取列表,你可以使用Reflector并反编译静态构造函数(cctor)。如果您采用这种方法,最好只创建一个支持的扩展及其MIME类型的列表并将其存储在字典中。(MimeMapping中的列表有点长)几个月前我遇到了类似的问题并用这个简单的System.Web.MimeMapping包装器解决了它(正如RichardSzalay所说)://////这个类允许访问System.Web中的内部MimeMapping-Class///classMimeMappingWrapper{staticMethodInfogetMimeMappingMethod;staticMimeMappingWrapper(){//肮脏的把戏-Assembly.LoadWIthPartialName已被弃用GetMethod("GetMimeMapping",BindingFlags.Static|BindingFlags.NonPublic);}//////根据传递的文件扩展名返回一个MIME类型//////获取MIME类型的文件///MIME类型根据文件扩展名publicstaticstringGetMimeMapping(stringfileName){return(string)getMimeMappingMethod.Invoke(null,new[]{fileName});}}CROSSPOST为什么反射搜索突然一无所获?好消息是MimeMapping类及其GetMimeMapping方法看起来将在.NET4.5中公开。但是,这意味着上面答案中给出的代码会中断,因为GetMimeMapping在NonPublic方法中搜索GetMimeMapping。为确保与.NET4.5兼容(但保留.NET4.0及更早版本的功能),更改...getMimeMappingMethod=t.GetMethod("GetMimeMapping",BindingFlags.Static|BindingFlags.NonPublic);...到:getMimeMappingMethod=t.GetMethod("GetMimeMapping",BindingFlags.Static|BindingFlags.NonPublic|BindingFlags.Public);此信息在注册表中,HKEY_CLASSES_ROOTContentTypeusing(varkey=Registry.ClassesRoot.OpenSubKey(".htm")){stringmimeType=key.GetValue("ContentType")asstring;如果我正确理解你的问题,你正在提供一个静态文件,并希望能够对静态文件请求执行某些操作以确定用户是否有权访问该文件。(基于MIME类型)如果您通过自定义IHttpHandler映射所有文件请求(请参阅web.config文件的处理程序部分),您应该能够完成此操作。在ProcessRequest(或BeginProcessRequest,如果您实现了异步处理程序)中,您可以调用HttpContext.Current.Server.MapPath("~"+HttpContext.Current.Request.Path)(可能是更好的方法)来获取当前请求的静态文件。然后,您可以分析该文件的扩展名来做出决定。不确定这是否是您要查找的内容,但希望它有所帮助以上是关于C#学习教程的全部内容:如何获取在ASP.NETC#中请求的文件的MIME类型?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: