在HTTP正文中发送XML文档

时间:2014-10-27 17:07:14

标签: web-services asp.net-web-api

我有一个方法

的Web API控制器
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,如

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

我怎么能这样做?尝试几种方法,但无法获得?感谢。

1 个答案:

答案 0 :(得分: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);
          }
        } 

您可以在此博文http://www.bizcoder.com/posting-raw-json-to-web-api

中找到有关行为原因的详细信息。