2013-04-05 53 views
0

我目前正在使用Windows Compact Framework 3.5與移動設備進行通信。發送到設備建立所述消息是如因而,Asp.net MVC web api Response.CreateResponse發送奇數內容

HttpResponseMessage result; 
var response = Encoding.UTF8.GetBytes("<?xml version=\"1.0\" encoding=\"windows-1252\"?><message type=\"response\"><header><datetime>2013-04-03T09:49:35</datetime><sender version=\"1.1.4.1138\"><userid>Connect Server</userid></sender><commandlist><module>ADMIN</module><command1>VALIDATE</command1></commandlist><result type=\"ok\"/></header></message>"); 

result = Request.CreateResponse(HttpStatusCode.OK, response); 

然後,設備檢索消息,然後使用

Encoding.UTF8.GetString(responseContent); 

消息解碼之後是:

&lt;base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/"&gt;PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUyIj8+PG1lc3NhZ2UgdHlwZT0icmVzcG9uc2UiPjxoZWFkZXI+PGRhdGV0aW1lPjIwMTMtMDQtMDNUMDk6NDk6MzU8L2RhdGV0aW1lPjxzZW5kZXIgdmVyc2lvbj0iMS4xLjQuMTEzOCI+PHVzZXJpZD5Db25uZWN0IFNlcnZlcjwvdXNlcmlkPjwvc2VuZGVyPjxjb21tYW5kbGlzdD48bW9kdWxlPkFETUlOPC9tb2R1bGU+PGNvbW1hbmQxPlZBTElEQVRFPC9jb21tYW5kMT48L2NvbW1hbmRsaXN0PjxyZXN1bHQgdHlwZT0ib2siLz48L2hlYWRlcj48L21lc3NhZ2U+&lt;/base64Binary&gt; 

嘗試解碼在發送它之前服務器上的消息並沒有問題。不確定會發生什麼問題。

任何幫助將不勝感激。

回答

2

Request.CreateResponse()使用ObjectContent。對於這種情況,你不希望這樣。您應該使用StringContent或StreamContent來返回XML。看到這個問題的細節https://stackoverflow.com/a/15372410/6819

0

您正在將XML編碼爲二進制。您然後返回一個字節數組。然後,您的客戶端在Accept: application/xml標題中請求XML。 Web API將二進制序列化爲XML。這就是你所看到的。

只要返回XML作爲一個字符串,你應該沒有問題,除非你已經試過了?

See here for similar question

+0

這將有同樣的問題,因爲Request.CreateResponse使用ObjectContent,它假定你想使用對象序列化。返回一個字符串將得到一個字符串對象的XML序列化,幷包含seralization命名空間。 – 2013-04-05 11:16:46

+0

@DarrelMiller我希望你是對的。這使得我接受的問題被認爲是錯誤的或誤導性的。 – 2013-04-05 11:23:46

+0

關於您鏈接到的問題的奇怪之處在於OP使用的是StringContent,因此應該返回正常。唯一的問題是StringContent將content-type設置爲text/plain,以便需要重寫。但是,被接受的答案是誤導性的。 – 2013-04-05 11:35:04