2013-03-05 115 views
2

我正在使用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方法。

回答

3

內容類型的尾隨分號無效。嘗試發送:

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

相關問題