2014-10-27 76 views
0

我有方法的Web API控制器發送XML文檔中的HTTP主體

public IHttpActionResult Get(int id) 
{ 
    try 
    { 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.LoadXml("test.xml"); 

    return Ok(xmlDoc.InnerXml); 
    } 
    catch (Exception ex) 
    { 
    return InternalServerError(ex); 
    } 
} 

XML文檔顯示爲HTTP消息體中的字符串

"<?xml version=\"1.0\" encoding=\"utf-8\"?><TestInfo xmlns=\"http://myschema\"><ID>171961</CSOSAID>...</TestInfo>" 

我希望它是簡單XML like

<?xml version="1.0" encoding="utf-8"?><TestInfo xmlns="http://myschema"><ID>171961</ID>...</TestInfo> 

我該怎麼辦?嘗試幾種方法,但無法得到?謝謝。

+0

你在哪裏看到的身體嗎?在調試器中?在實體中不可能包含'\「',請嘗試使用」查看源代碼「來確定它的外觀 – 2014-10-27 17:35:41

+0

我正在使用Fiddler進行測試,並且可以看到原始消息 – user3616544 2014-10-27 17:37:13

+0

我建議您查看源代碼返回XML後的頁面'''',並且引用它是創建XML的奇怪方式。 – 2014-10-27 17:39:22

回答

0

您正在使用不是您想要的XMLSerializer序列化String對象。

你可以做到這一點,

public IHttpActionResult Get(int id) 
{ 
    try 
    { 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.LoadXml("test.xml"); 

    return new ResponseMessageResult(new HttpResponseMessage() {Content = new StringContent(xmlDoc.InnerXml, Encoding.UTF8,"application/xml")}); 
    } 
    catch (Exception ex) 
    { 
    return InternalServerError(ex); 
    } 
} 

,或者你可以創建自己的IHttpActionResult助手類,這樣,

public class XmlResult : IHttpActionResult 
    { 
     private readonly XmlDocument _doc; 

     public XmlResult(XmlDocument doc) 
     { 
      _doc = doc; 
     } 

     public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
     { 
      return 
       Task.FromResult(new HttpResponseMessage() 
       { 
        Content = new StringContent(_doc.InnerXml, Encoding.UTF8, "application/xml") 
       }); 
     } 
    } 

那麼這將允許你這樣做,

public IHttpActionResult Get(int id) 
    { 
     try 
     { 
     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml("test.xml"); 

     return new XmlResult(xmlDoc); 
     } 
     catch (Exception ex) 
     { 
     return InternalServerError(ex); 
     } 
    } 

或者你可以切換到XElement,它會神奇地做正確的事情,

public IHttpActionResult Get(int id) 
     { 
      try 
      { 
      XElement xElement = XElement.Load(..); 

      return OK(xElement); 
      } 
      catch (Exception ex) 
      { 
      return InternalServerError(ex); 
      } 
     } 

你可以找到爲什麼行爲的方式,ISIN這篇博客文章的詳細信息http://www.bizcoder.com/posting-raw-json-to-web-api

+0

我使用了你的第一個建議,它可以按我的意願工作。非常感謝你。 – user3616544 2014-10-27 18:50:36