HttpWebResponse的ContentType属性是否有枚举类型(如"text/plain","application/octet-stream"等)?

60
我能找到的最接近的是System.Net.Mime.MediaTypeNames,但似乎并不包含所有内容(例如JSON),因为它似乎更专注于电子邮件附件。

4
类似的问题可以在这里找到。通常人们会创建常量来处理它,因为System.Net.Mime.MediaTypeNames不可能是一个详尽/完整的列表。 - RBT
5个回答

32

8
我理解这个意思。它不应该作为.NET框架的一部分,因为该框架不经常更新(也不应该)。但是可以将其作为独立的库,随着新类型的添加和库用户的需求而经常更新。时区也是无限制的,但似乎这并不能消除基于tz数据库的库的实用性。 - Kenny Evitt
3
我们在内部使用枚举类型表示经常使用的常见类型,这没有问题。这似乎比使用神秘字符串更好,对吧? - crush
回顾往事,我们总是觉得一切都很清晰,但 MIME 类型和 HTTP 状态码一样,并非无限制的,它们可以作为常量或枚举类型进行合理使用。正如我的回答所述,在2022年,微软将包含 MIME 类型字符串常量。 - richard_ob

12
在2022年,通过.NET Core和.NET 5+,现在可以通过MediaTypeNames来实现。例如:
  • MediaTypeNames.Application.Json
  • MediaTypeNames.Image.Png
  • MediaTypeNames.Text.Html
Microsoft关于MediaTypeNames的文档,以及每个Application、Image和Text。 2013年更新: 在.NET 8中,进一步添加了更多的MIME类型,并且更加详尽: https://learn.microsoft.com/en-us/dotnet/api/system.net.mime.mediatypenames?view=net-8.0

其中一些 mediatypenames 在 .net 4.6 中也存在,但像 application/json 这样重要的却缺失了。 - user2728841
这很不错,但看起来它相当有限。我正在寻找 text/csv 但它不受支持。 - Michael Murphy
1
@MichaelMurphy 看起来在.NET 8中添加了对text/csv的支持,还有其他一些功能!https://learn.microsoft.com/en-us/dotnet/api/system.net.mime.mediatypenames.text.csv?view=net-8.0#system-net-mime-mediatypenames-text-csv - Richard
1
@richard_ob 是时候了! - Michael Murphy

3

IANA数据库可能是最完整的。目前,他们在https://www.iana.org/assignments/media-types/application.csv上提供了CSV格式的列表。我假设这是一个稳定的URL,其内容会随着更新而变化。如果您想保持最新状态,您需要组合一个适合您需求的机制。

此外,还有Apache附带的mime.types文件,它似乎是从上述列表中衍生出来的。


一份平面列表已经作为CSV文件在IANA数据库网站上提供。 - ˈvɔlə
1
我几年前解析了维基百科上列出的内容,并生成了C#代码,它在这里:https://dev59.com/2Gkv5IYBdhLWcg3wwjkI - Luke Puplett
这是一个指向IANA数据库的链接,其中包含工作的.csv链接:https://www.iana.org/assignments/media-types/media-types.xhtml - Florian Falk

1
如果你像我一样不想在代码中硬编码字符串,可以使用以下方法: httpHeaders.add(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE); 这实际上等同于 httpHeaders.add("Content-Type","application/json");

1

为了我的有限需求,我创建了一个静态类,基本上是包含 .NET MediaTypeNames 类的副本,但包括我需要的 MIME 类型;.NET MediaTypeNames 缺少我需要的值。

public static class MediaMimeTypes
{
    /// <summary>
    /// Specifies that the MediaMimeType is not interpreted.
    /// </summary>
    public const string Octet = "application/octet-stream";

    /// <summary>
    /// Specifies that the MediaMimeType is in a Comma Separated Values (CSV) format.
    /// </summary>
    public const string Csv = "text/csv";
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接