我有一个方法
的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>
我怎么能这样做?尝试几种方法,但无法获得?感谢。
答案 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);
}
}
中找到有关行为原因的详细信息。