为什么Request Header Null上的ContentType属性?

问题描述:

我正在使用Fiddler组合对我的Web API服务的调用。通话正在进行,我正在调试它在控制器中。但是,Request.Content.Headers.ContentTypenull。然而,当我检查的对象,我可以看到Content-Type: application/xml;象下面这样:为什么Request Header Null上的ContentType属性?

?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值,并将它填充?

编辑:这里是方法签名为我Post方法:

public HttpResponseMessage Post(MyMethodDTO message) 

MyMethodDTO仅仅是一个简单的DTO类的getter /是所有字符串setter方法。

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

Content-Type: application/xml 

改为。

HTTP规范定义了一个媒体类型:

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

所以应该只有一个分号媒体类型参数前右

+0

奇怪的是我加入吧','所以通话会,但经过这是一个错误。当我删除它时,出现以下错误:'没有MediaTypeFormatter可用于从媒体类型为'application/xml''的内容读取'MyMethodDTO'类型的对象我使用方法签名更新了OP。 – atconway 2013-03-06 02:32:50

+0

想通了 - 我使用的是在Global.asax中注册的XMLSerializer,而不是DataContractSerializer。当我删除使用XMLSerializer的注册并返回到DataContractSerializer并从Content-type中删除';'时,它就起作用了。我可以提出一个新问题,但如果您不介意,为什么我不能在Post中使用XMLSerializer和XML? – atconway 2013-03-06 03:17:22

+1

检查控制器上的ModelState属性是否存在反序列化错误。有可能,使用XmlSerializer进行反序列化时出现问题。 – 2013-03-06 18:58:14