为什么Request Header Null上的ContentType属性?
问题描述:
我正在使用Fiddler组合对我的Web API服务的调用。通话正在进行,我正在调试它在控制器中。但是,Request.Content.Headers.ContentType
是null
。然而,当我检查的对象,我可以看到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)
所以应该只有一个分号媒体类型参数前右
奇怪的是我加入吧','所以通话会,但经过这是一个错误。当我删除它时,出现以下错误:'没有MediaTypeFormatter可用于从媒体类型为'application/xml''的内容读取'MyMethodDTO'类型的对象我使用方法签名更新了OP。 – atconway 2013-03-06 02:32:50
想通了 - 我使用的是在Global.asax中注册的XMLSerializer,而不是DataContractSerializer。当我删除使用XMLSerializer的注册并返回到DataContractSerializer并从Content-type中删除';'时,它就起作用了。我可以提出一个新问题,但如果您不介意,为什么我不能在Post中使用XMLSerializer和XML? – atconway 2013-03-06 03:17:22
检查控制器上的ModelState属性是否存在反序列化错误。有可能,使用XmlSerializer进行反序列化时出现问题。 – 2013-03-06 18:58:14