C# 为什么请求头上的ContentType属性为空?
我正在使用Fiddler编写对Web API服务的调用。电话接通了,我正在控制器中调试。但是,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
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进行反序列化时出错。