[英]Return XML document with REST API
我想從rest api請求返回一個xml文檔:
[HttpPost]
public string getClassXml(HttpRequestMessage req)
{
var response = Request.CreateResponse(HttpStatusCode.OK);
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
ClassXML classid = new ClassXML();
XmlDocument doc = new XmlDocument();
try
{
var data = req.Content.ReadAsStringAsync().Result;
classid = serializer.Deserialize<ClassXML>(data.ToString().Trim());
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
string path = ASDb.ReadValue("SELECT definitionxml FROM alclass WHERE classid='" + classid.classID + "'").ToString();
XmlTextReader reader = new XmlTextReader(AppDomain.CurrentDomain.BaseDirectory + "Resource\\" + percorso);
reader.Read();
doc.Load(reader);
return doc.innerXml;
}
但是通過這種方式,我得到了一個字符串,我想擁有一個XmlDocument而不是一個字符串。 我也嘗試返回XmlDocument文檔,但是它給了我一個錯誤:“ ObjectContent`1”類型未能序列化內容類型“ application / xml”的響應主體; charset = utf-8'。 你有什么想法?
正如有人在幾秒鍾前在這里寫的(但隨后刪除了他的答案)那樣,問題是XmlDocument無法序列化,如果您使用XmlElement則可以。 這是我所做的:
[HttpPost]
public XmlElement getClassXml(HttpRequestMessage req)
{
var response = Request.CreateResponse(HttpStatusCode.OK);
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
ClassXML classid = new ClassXML();
XmlDocument doc = new XmlDocument();
try
{
var data = req.Content.ReadAsStringAsync().Result;
classid = serializer.Deserialize<ClassXML>(data.ToString().Trim());
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
string path = ASDb.ReadValue("SELECT definitionxml FROM alclass WHERE classid='" + classid.classID + "'").ToString();
XmlTextReader reader = new XmlTextReader(AppDomain.CurrentDomain.BaseDirectory + "Resource\\" + percorso);
reader.Read();
doc.Load(reader);
XmlElement element = doc.DocumentElement;
return element;
}
也許問題不在於您的API層,而是當您嘗試使用XmlTextReader時?
XmlTextReader reader = new XmlTextReader(AppDomain.CurrentDomain.BaseDirectory + "Resource\\\\" + percorso);
您嘗試讀取的XML是什么樣的? 您檢查過格式是否正確?
關於“使用REST API返回XML文檔”,我建議您僅將XML文檔輸出為具有適當MIME類型的字符串,方法如下:
[HttpPost]
public HttpResponseMessage getClassXml(HttpRequestMessage req)
{
...
XmlTextReader reader = new XmlTextReader(AppDomain.CurrentDomain.BaseDirectory + "Resource\\" + percorso);
reader.Read();
doc.Load(reader);
HttpResponseMessage response = new HttpResponseMessage { Content = new StringContent(doc.innerXml, Encoding.UTF8,"application/xml") };
return response;
}
REST API輸出應映射到標准的Internet MIME類型(例如JSON數據,圖像,文本等,而不是XmlDocument)。 無論使用哪種REST API,只要有必要,就可以獲取文本並將其轉換為XmlDocument。
順便說一句,您似乎甚至沒有使用所提供示例中的一半代碼,並且可以清理它:
string path = ASDb.ReadValue("SELECT definitionxml FROM alclass WHERE classid='" + classid.classID + "'").ToString();
抱歉,但是如果我現在想從HttpPost更改為HttpGet,如何在以下URL中獲取參數: http://localhost/arcosat/api/ws/GetClassXml?classid=myclass
我想獲取“ myclass”字符串,但是與req.Content.ReadAsStringAsync().Result
不再起作用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.