C#Mime类型类

C#Mime类型类,c#,.net,mime-types,C#,.net,Mime Types,我想在代码中保存Mime类型。 现在我习惯于这样做: string mYMimeType = "text/plain"; 有没有办法将它保存在一个(已经存在的)标准的专用类中? 类似于 Http.MimeTypes myMimeType = Http.MimeTypes.TextPlain; 您可以使用System.Net.Mimenamesapce中存在的MediaTypeNames类 下面是.net类可以帮助您,您不必自己创建它 namespace System.Net.Mime {

我想在代码中保存Mime类型。 现在我习惯于这样做:

string mYMimeType = "text/plain";
有没有办法将它保存在一个(已经存在的)标准的专用类中? 类似于

Http.MimeTypes myMimeType = Http.MimeTypes.TextPlain;

您可以使用
System.Net.Mime
namesapce中存在的
MediaTypeNames

下面是.net类可以帮助您,您不必自己创建它

namespace System.Net.Mime
{
    // Summary:
    //     Specifies the media type information for an e-mail message attachment.
    public static class MediaTypeNames
    {

        // Summary:
        //     Specifies the kind of application data in an e-mail message attachment.
        public static class Application
        {
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Application data is not
            //     interpreted.
            public const string Octet = "application/octet-stream";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Application data is in
            //     Portable Document Format (PDF).
            public const string Pdf = "application/pdf";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Application data is in
            //     Rich Text Format (RTF).
            public const string Rtf = "application/rtf";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Application data is a SOAP
            //     document.
            public const string Soap = "application/soap+xml";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Application data is compressed.
            public const string Zip = "application/zip";
        }

        // Summary:
        //     Specifies the type of image data in an e-mail message attachment.
        public static class Image
        {
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Image data is in Graphics
            //     Interchange Format (GIF).
            public const string Gif = "image/gif";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Image data is in Joint
            //     Photographic Experts Group (JPEG) format.
            public const string Jpeg = "image/jpeg";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Image data is in Tagged
            //     Image File Format (TIFF).
            public const string Tiff = "image/tiff";
        }

        // Summary:
        //     Specifies the type of text data in an e-mail message attachment.
        public static class Text
        {
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Text data is in HTML format.
            public const string Html = "text/html";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Text data is in plain text
            //     format.
            public const string Plain = "text/plain";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Text data is in Rich Text
            //     Format (RTF).
            public const string RichText = "text/richtext";
            //
            // Summary:
            //     Specifies that the System.Net.Mime.MediaTypeNames.Text data is in XML format.
            public const string Xml = "text/xml";
        }
    }
}

MediaTypeNames对于类来说是一个糟糕的名称选择。首先,它是无缘无故的复数形式(坏习惯)。其次,它缺乏凝聚力。文档中说该类“指定媒体类型信息”,但调用该类MediaTypeNames而不是MediaTypeInformation


尤其可悲的是,这一点在.Net文档中被反复提及。这意味着未来几代开发人员将继续回收这种不良做法。

您可以使用方法通过文件扩展名
MimeTypeMapper.GetMimeType(“.xlsx”)
以下是一个实施示例:

public static class MimeTypeMapper
{
    private static readonly IDictionary<string, string> _mappings =
        new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
        {
            {".xls", "application/vnd.ms-excel"},
            {".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"},
            {".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"},
            {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
            {".xlt", "application/vnd.ms-excel"},
            {".xltm", "application/vnd.ms-excel.template.macroEnabled.12"},
            {".zip", "application/x-zip-compressed"},
        };

    public static string GetMimeType(string extension)
    {
        if (extension == null)
        {
            throw new ArgumentNullException("extension");
        }
        if (!extension.StartsWith("."))
        {
            extension = "." + extension;
        }
        string mime;
        return _mappings.TryGetValue(extension, out mime) ? mime : "application/octet-stream";
    }
}
公共静态类MimeTypeMapper
{
私有静态只读IDictionary\u映射=
新字典(StringComparer.InvariantCultureInogoreCase)
{
{.xls”,“application/vnd.ms excel”},
{.xlsb”,“application/vnd.ms excel.sheet.binary.macroEnabled.12”,
{.xlsm”,“application/vnd.ms excel.sheet.macroEnabled.12”,
{.xlsx”,“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”},
{.xlt”,“application/vnd.ms excel”},
{.xltm”,“application/vnd.ms excel.template.macroEnabled.12”,
{.zip”,“应用程序/x-zip-compressed”},
};
公共静态字符串GetMimeType(字符串扩展名)
{
if(扩展==null)
{
抛出新的ArgumentNullException(“扩展”);
}
如果(!extension.StartsWith(“.”)
{
扩展=“.”+扩展;
}
字符串mime;
返回_mappings.TryGetValue(扩展名,输出mime)?mime:“应用程序/八位字节流”;
}
}

为什么像.net这样的标准没有所有的媒体类型,只有少数媒体类型?我不明白:-)但是,谢谢你的回复他们甚至没有
text/json
application/json
,哇。哦,那不是真的。自定义dotnet core 2.1 MediaTypeNames.Application.Json以来。