创建ContentType会抛出FormatException

时间:2014-12-14 20:00:53

标签: c# mime-types content-type system.net formatexception

我正在使用ContentType类来解析网页的内容类型(type + encoding)。

我注意到此输入失败(FormatException):

  

的text / html; charset:windows-1255

这是代码:

using System.Net.Mime;
//...
ContentType ct;
try
{
    ct = new ContentType(content_type);
}
catch (FormatException ex)
{
    return eFileType.Unknown;
}

为什么要投掷FormatException

2 个答案:

答案 0 :(得分:4)

ContentType构造函数上的documentation表示如果出现FormatException,则contentType

  

charset:采用无法解析的形式。

在这种情况下,这是因为不支持charset=var x = new ContentType("text/html; charset=windows-1255"); 是:

attribute

此行为符合W3C specs on content type headers,表明参数必须遵循以下格式:

  

参数:= attribute“=”value

所以等号是value和{{1}}之间记录的分隔符。

答案 1 :(得分:2)

  1. MediaTypeHeaderValue构造函数期望仅接受媒体类型ex:'application / abc',对于任何其他参数(如CharSet或任何自定义参数),您可以使用此类型的CharSet和Parameters集合。
  2. 或者,您可以通过以下字符串表示创建MediaTypeHeaderValue:

    MediaTypeHeaderValue.Parse(“application / x-www-form-urlencoded; charset = utf-8”)

    1. WebAPI附带3个默认格式化程序:Json,Xml和FormUrlEncoded。 FormUrlEncoded格式化程序具有与您的媒体类型相同的支持媒体类型,即“application / x-www-form-urlencoded”。注册格式化程序时,可能会将其添加到格式化程序集合的末尾。现在当连接过程发生时,它会在格式化列表中选择第一个合适的格式化程序来编写响应。在这种情况下,它恰好选择我们发布的默认FormUrlEncoded格式化程序而不是您的自定义格式化程序。
    2. https://forums.asp.net/t/1780855.aspx?Media+type+name+and+a+custom+formatter+