C# 为什么请求头上的ContentType属性为空?

C# 为什么请求头上的ContentType属性为空?,c#,http-headers,asp.net-web-api,httprequest,C#,Http Headers,Asp.net Web Api,Httprequest,我正在使用Fiddler编写对Web API服务的调用。电话接通了,我正在控制器中调试。但是,Request.Content.Headers.ContentType为null。然而,当我检查对象时,我可以看到内容类型:application/xml如下所示: ?Request.Content.Headers {Content-Length: 40039 Content-Type: application/xml; } base {System.Net.Http.Headers.HttpH

我正在使用Fiddler编写对Web API服务的调用。电话接通了,我正在控制器中调试。但是,
Request.Content.Headers.ContentType
null
。然而,当我检查对象时,我可以看到
内容类型:application/xml如下所示:

?Request.Content.Headers
{Content-Length: 40039
Content-Type: application/xml;
}
    base {System.Net.Http.Headers.HttpHeaders}: {Content-Length: 40039
Content-Type: application/xml;
}
    Allow: {}
    ContentDisposition: null
    ContentEncoding: {}
    ContentLanguage: {}
    ContentLength: 40039
    ContentLocation: null
    ContentMD5: null
    ContentRange: null
    ContentType: null
    Expires: null
    LastModified: null
我需要做什么才能检查
ContentType
值并填充它

编辑:这是我的帖子方法的方法签名:

public HttpResponseMessage Post(MyMethodDTO message)

MyMethodDTO
只是一个简单的DTO类,其getter/setter都是字符串。

内容类型中的尾随分号无效。尝试发送:

Content-Type: application/xml
相反

HTTP规范将媒体类型定义为:

media-type     = type "/" subtype *( ";" parameter )

所以在媒体类型参数前面应该只有一个分号,奇怪的是我添加了它
所以电话会通过,但那是个错误。当我删除它时,会出现以下错误:
没有MediaTypeFormatter可用于从媒体类型为“application/xml”的内容中读取类型为“MyMethodTo”的对象。
我用方法签名更新了OP。解决了这个问题-我使用的是在Global.asax中注册的XMLSerializer,而不是DataContractSerializer。当我删除使用XMLSerializer的注册并返回DataContractSerializer,同时删除
内容类型
正如您所提到的,它起作用了。我可以提出一个新问题,但如果您不介意的话,为什么我不能在Post中将XMLSerializer与XML一起使用呢?请检查控制器上的ModelState属性以查找反序列化错误。很可能,在使用XmlSerializer进行反序列化时出错。